|  | @@ -509,12 +509,14 @@
 | 
											
												
													
														|  |                      } else if ("tags" in opts) {
 |  |                      } else if ("tags" in opts) {
 | 
											
												
													
														|  |                          opts.query = tags(opts.tags);
 |  |                          opts.query = tags(opts.tags);
 | 
											
												
													
														|  |                          opts.createSearchChoice = function (term) { return {id: term, text: term}; };
 |  |                          opts.createSearchChoice = function (term) { return {id: term, text: term}; };
 | 
											
												
													
														|  | -                        opts.initSelection = function (element) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        opts.initSelection = function (element, callback) {
 | 
											
												
													
														|  |                              var data = [];
 |  |                              var data = [];
 | 
											
												
													
														|  |                              $(splitVal(element.val(), ",")).each(function () {
 |  |                              $(splitVal(element.val(), ",")).each(function () {
 | 
											
												
													
														|  |                                  data.push({id: this, text: this});
 |  |                                  data.push({id: this, text: this});
 | 
											
												
													
														|  |                              });
 |  |                              });
 | 
											
												
													
														|  | -                            return data;
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                            if ($.isFunction(callback))
 | 
											
												
													
														|  | 
 |  | +                                callback(data);
 | 
											
												
													
														|  |                          };
 |  |                          };
 | 
											
												
													
														|  |                      }
 |  |                      }
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
										
											
												
													
														|  | @@ -958,15 +960,18 @@
 | 
											
												
													
														|  |              var selected;
 |  |              var selected;
 | 
											
												
													
														|  |              if (this.opts.element.val() === "") {
 |  |              if (this.opts.element.val() === "") {
 | 
											
												
													
														|  |                  this.updateSelection({id: "", text: ""});
 |  |                  this.updateSelection({id: "", text: ""});
 | 
											
												
													
														|  | 
 |  | +                this.close();
 | 
											
												
													
														|  | 
 |  | +                this.setPlaceholder();
 | 
											
												
													
														|  |              } else {
 |  |              } else {
 | 
											
												
													
														|  | -                selected = this.opts.initSelection.call(null, this.opts.element);
 |  | 
 | 
											
												
													
														|  | -                if (selected !== undefined && selected !== null) {
 |  | 
 | 
											
												
													
														|  | -                    this.updateSelection(selected);
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | 
 |  | +                var self = this;
 | 
											
												
													
														|  | 
 |  | +                this.opts.initSelection.call(null, this.opts.element, function(selected){
 | 
											
												
													
														|  | 
 |  | +                    if (selected !== undefined && selected !== null) {
 | 
											
												
													
														|  | 
 |  | +                        self.updateSelection(selected);
 | 
											
												
													
														|  | 
 |  | +                        self.close();
 | 
											
												
													
														|  | 
 |  | +                        self.setPlaceholder();
 | 
											
												
													
														|  | 
 |  | +                    }    
 | 
											
												
													
														|  | 
 |  | +                });
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -            this.close();
 |  | 
 | 
											
												
													
														|  | -            this.setPlaceholder();
 |  | 
 | 
											
												
													
														|  |          },
 |  |          },
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          prepareOpts: function () {
 |  |          prepareOpts: function () {
 | 
											
										
											
												
													
														|  | @@ -974,10 +979,11 @@
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              if (opts.element.get(0).tagName.toLowerCase() === "select") {
 |  |              if (opts.element.get(0).tagName.toLowerCase() === "select") {
 | 
											
												
													
														|  |                  // install sthe selection initializer
 |  |                  // install sthe selection initializer
 | 
											
												
													
														|  | -                opts.initSelection = function (element) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                opts.initSelection = function (element, callback) {
 | 
											
												
													
														|  |                      var selected = element.find(":selected");
 |  |                      var selected = element.find(":selected");
 | 
											
												
													
														|  |                      // a single select box always has a value, no need to null check 'selected'
 |  |                      // a single select box always has a value, no need to null check 'selected'
 | 
											
												
													
														|  | -                    return {id: selected.attr("value"), text: selected.text()};
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    if ($.isFunction(callback))
 | 
											
												
													
														|  | 
 |  | +                        callback({id: selected.attr("value"), text: selected.text()});
 | 
											
												
													
														|  |                  };
 |  |                  };
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1116,12 +1122,14 @@
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              if (opts.element.get(0).tagName.toLowerCase() === "select") {
 |  |              if (opts.element.get(0).tagName.toLowerCase() === "select") {
 | 
											
												
													
														|  |                  // install sthe selection initializer
 |  |                  // install sthe selection initializer
 | 
											
												
													
														|  | -                opts.initSelection = function (element) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                opts.initSelection = function (element,callback) {
 | 
											
												
													
														|  |                      var data = [];
 |  |                      var data = [];
 | 
											
												
													
														|  |                      element.find(":selected").each(function () {
 |  |                      element.find(":selected").each(function () {
 | 
											
												
													
														|  |                          data.push({id: $(this).attr("value"), text: $(this).text()});
 |  |                          data.push({id: $(this).attr("value"), text: $(this).text()});
 | 
											
												
													
														|  |                      });
 |  |                      });
 | 
											
												
													
														|  | -                    return data;
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                    if ($.isFunction(callback))
 | 
											
												
													
														|  | 
 |  | +                        callback(data);
 | 
											
												
													
														|  |                  };
 |  |                  };
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1228,18 +1236,21 @@
 | 
											
												
													
														|  |              var data;
 |  |              var data;
 | 
											
												
													
														|  |              if (this.opts.element.val() === "") {
 |  |              if (this.opts.element.val() === "") {
 | 
											
												
													
														|  |                  this.updateSelection([]);
 |  |                  this.updateSelection([]);
 | 
											
												
													
														|  | 
 |  | +                this.close();
 | 
											
												
													
														|  | 
 |  | +                // set the placeholder if necessary
 | 
											
												
													
														|  | 
 |  | +                this.clearSearch();
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              if (this.select || this.opts.element.val() !== "") {
 |  |              if (this.select || this.opts.element.val() !== "") {
 | 
											
												
													
														|  | -                data = this.opts.initSelection.call(null, this.opts.element);
 |  | 
 | 
											
												
													
														|  | -                if (data !== undefined && data !== null) {
 |  | 
 | 
											
												
													
														|  | -                    this.updateSelection(data);
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | -            }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -            this.close();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -            // set the placeholder if necessary
 |  | 
 | 
											
												
													
														|  | -            this.clearSearch();
 |  | 
 | 
											
												
													
														|  | 
 |  | +                var self = this;
 | 
											
												
													
														|  | 
 |  | +                this.opts.initSelection.call(null, this.opts.element, function(data){
 | 
											
												
													
														|  | 
 |  | +                    if (data !== undefined && data !== null) {
 | 
											
												
													
														|  | 
 |  | +                        self.updateSelection(data);
 | 
											
												
													
														|  | 
 |  | +                        self.close();
 | 
											
												
													
														|  | 
 |  | +                        // set the placeholder if necessary
 | 
											
												
													
														|  | 
 |  | +                        self.clearSearch();
 | 
											
												
													
														|  | 
 |  | +                    }    
 | 
											
												
													
														|  | 
 |  | +                });
 | 
											
												
													
														|  | 
 |  | +            }            
 | 
											
												
													
														|  |          },
 |  |          },
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          clearSearch: function () {
 |  |          clearSearch: function () {
 |