2016-06-29 18 views
0

suchen Ich verwende eine Auswahlbox in Kombination mit dem jQuery gewählten Plugin. Ich gab jeder Option einen Wert (4-stelliger Code) und einen Titel (Beschreibung des Codes).jQuery Chosen: Wie in Titel der Option

Ich möchte das Plugin im Titel auch suchen, wenn ich etwas in das Suchfeld eintippe. Momentan funktioniert es nur für den inneren Text der Option.

Hat jemand das schon einmal gemacht oder weiß jemand, wie man das macht?

Thanks :)

+0

lesen Sie bitte auf [mcve] (http://stackoverflow.com/help/mcve) – guradio

Antwort

0

hatte ich das genaue Problem, das Sie Gesicht und schaffte es zu lösen durch die gewählte Plugin js Bibliothek zu manipulieren.

Grundsätzlich müssen Sie für die Linien mit option.html suchen, weil die Suchfilter mit option.html arbeiten.

Statt nur mit option.html arbeiten, wollen wir es jetzt filtern, um die Titel-Option als auch Attribut, das die option.title in diesem Fall ist.

Suche nach der Zeile mit AbstractChosen.prototype.winnow_results = function() {.

Dies ist der Original-Code innerhalb der Funktion:

 option.search_text = option.group ? option.label : option.html; 
     if (!(option.group && !this.group_search)) { 
     option.search_match = this.search_string_match(option.search_text, regex); 
     if (option.search_match && !option.group) { 
      results += 1; 
     } 
     if (option.search_match) { 
      if (searchText.length) { 
      startpos = option.search_text.search(zregex); 
      text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length); 
      option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos); 
      } 
      if (results_group != null) { 
      results_group.group_match = true; 
      } 
     } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { 
      option.search_match = true; 
     } 

Lassen Sie uns dies ändern: Stück für ein anderes Jetzt Code

 option.search_text = option.group ? option.label : option.html; 
     if (!(option.group && !this.group_search)) { 
     option.search_match = this.search_string_match(option.html, regex) || this.search_string_match_title(option.title, regex); 
     option.search_match_title = this.search_string_match_title(option.title, regex); 
     if (option.search_match && !option.group) { 
      results += 1; 
     } 
     if (option.search_match) { 
      if (searchText.length) { 
      if (option.search_match_title) { 
       startpos = option.title.search(zregex); 
      } 
      else { 
       startpos = option.search_text.search(zregex); 
       text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length); 
       option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos); 
      } 
      } 
      if (results_group != null) { 
      results_group.group_match = true; 
      } 
     } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { 
      option.search_match = true; 
     } 

unten aussehen:

AbstractChosen.prototype.search_string_match = function(search_string, regex) { 
    var part, parts, _i, _len; 
    if (regex.test(search_string)) { 
    return true; 
    } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { 
    parts = search_string.replace(/\[|\]/g, "").split(" "); 
    if (parts.length) { 
     for (_i = 0, _len = parts.length; _i < _len; _i++) { 
     part = parts[_i]; 
     if (regex.test(part)) { 
      return true; 
     } 
     } 
    } 
    } 
}; 

Danach müssen Sie einfach einfügen der folgende Code unter der obigen Funktion:

AbstractChosen.prototype.search_string_match_title = function(search_string, regex) { 
    var part, parts, _i, _len; 
    if (regex.test(search_string)) { 
    return true; 
    } 
}; 

Hoffnung, das hilft.