Sie müssen das Plugin bearbeiten, wie hier skizziert:
http://bitsmash.wordpress.com/2012/10/01/making-disabled-elements-visible-with-the-jquery-chosen-plugin/
Das Plugin liest in einem ausgewählten, entfernt es aus dem DOM, und fügt eine neue ul. Markiert Optionen „Disabled“ werden übersprungen, wenn li auf die neue ul
Zugabe
Hier wird das Verfahren von Interesse in chosen.jquery.js
AbstractChosen.prototype.result_add_option = function(option) {
var classes, style;
if (!option.disabled) {
option.dom_id = this.container_id + "_o_" + option.array_index;
classes = option.selected && this.is_multiple ? [] : ["active-result"];
if (option.selected) classes.push("result-selected");
if (option.group_array_index != null) classes.push("group-option");
if (option.classes !== "") classes.push(option.classes);
style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : "";
return '<li id="' + option.dom_id + '" class="' + classes.join(' ') + '"' + style + '>' + option.html + '</li>';
} else {
return "";
}
};
Beachten Sie, dass, wenn eine Option deaktiviert ist es nichts zurückgibt. Nehmen Sie die Linie
return "";
und legen Sie die HTML/CSS, die Sie für ein deaktiviertes Element möchten. Oder Sie können den Block if (! Option.disabled) entfernen und einen neuen if (! Option.disabled) -Block hinzufügen, der eine spezielle CSS-Klasse hinzufügt, wenn das Element deaktiviert ist.
Als nächstes müssen Sie sicherstellen, dass wenn Benutzer auf ein deaktiviertes Element klicken nichts passiert. Sie müssen diese Methode bearbeiten:
Chosen.prototype.result_select = function(evt) {
var high, high_id, item, position;
if (this.result_highlight) {
high = this.result_highlight;
high_id = high.attr("id");
this.result_clear_highlight();
if (this.is_multiple) {
this.result_deactivate(high);
} else {
this.search_results.find(".result-selected").removeClass("result-selected");
this.result_single_selected = high;
this.selected_item.removeClass("chzn-default");
}
high.addClass("result-selected");
position = high_id.substr(high_id.lastIndexOf("_") + 1);
item = this.results_data[position];
item.selected = true;
this.form_field.options[item.options_index].selected = true;
if (this.is_multiple) {
this.choice_build(item);
} else {
this.selected_item.find("span").first().text(item.text);
if (this.allow_single_deselect) this.single_deselect_control_build();
}
if (!(evt.metaKey && this.is_multiple)) this.results_hide();
this.search_field.val("");
if (this.is_multiple || this.form_field_jq.val() !== this.current_value) {
this.form_field_jq.trigger("change", {
'selected': this.form_field.options[item.options_index].value
});
}
this.current_value = this.form_field_jq.val();
return this.search_field_scale();
}
};
einen Block hinzufügen, der sagt, wenn deaktiviert, falsch zurück, dann, wenn der Benutzer auf das Element nichts klicken passieren wird.
können Sie das Element in Firebug zu prüfen und sehen, ob das Element einen Stil hat ''display: none;'', ''visibility: hidden'' oder '' opacity: 0''? Oder ist es vollständig aus dem DOM entfernt? – Ohgodwhy
Sorry für die späte Antwort, ich habe die Frage bearbeitet. – take
Ich habe mir die Source und Docs für das Plugin angeschaut. Es ist offensichtlich, dass 'ausgewählt ausgewählte Optionen automatisch markiert und deaktivierte Optionen entfernt 'wird, wie direkt im DOCS erwähnt. Eine nähere Betrachtung zeigt, dass Sie diesen Tag neu konfigurieren müssen. – Ohgodwhy