Werfen Sie einen Blick auf misc/autocomplete.js.
/**
* Attaches the autocomplete behavior to all required fields
*/
Drupal.behaviors.autocomplete = function (context) {
var acdb = [];
$('input.autocomplete:not(.autocomplete-processed)', context).each(function() {
var uri = this.value;
if (!acdb[uri]) {
acdb[uri] = new Drupal.ACDB(uri);
}
var input = $('#' + this.id.substr(0, this.id.length - 13))
.attr('autocomplete', 'OFF')[0];
$(input.form).submit(Drupal.autocompleteSubmit);
new Drupal.jsAC(input, acdb[uri]);
$(this).addClass('autocomplete-processed');
});
};
Der VALUE-Attribut des Eingangs wird verwendet ACDB zu schaffen, die ein Cache von Werten für diesen automatischen Vervollständigung Pfad (uri). Das ist in der Drupal.jsAC Funktion des Elements keydown, keyup und Unschärfe Ereignisse binden mit Triggern der automatischen Vervollständigung ajax Betrieb (die für das Element seine Werte in dem Objekt ACDB Caches) öffnet popups usw.
/**
* An AutoComplete object
*/
Drupal.jsAC = function (input, db) {
var ac = this;
this.input = input;
this.db = db;
$(this.input)
.keydown(function (event) { return ac.onkeydown(this, event); })
.keyup(function (event) { ac.onkeyup(this, event); })
.blur(function() { ac.hidePopup(); ac.db.cancel(); });
};
Sie müssen den Wert der Eingabe ändern und das Verhalten erneut festlegen. Sie fügen das Verhalten erneut hinzu, indem Sie die Klasse ".autocomplete-processed" für das Eingabeelement für die Autovervollständigung entfernen und dann Drupal.attachBehaviors (thatInputElement) aufrufen.
Dies funktioniert möglicherweise nicht. Dinge können sehr schlecht gehen, wenn Sie dasselbe Verhalten immer wieder an dasselbe Element anhängen. Es kann sinnvoller sein, verschiedene Autocomplete-Felder zu erstellen und diese basierend auf dem Wert der Auswahl einfach auszublenden und anzuzeigen. Dies würde immer noch den Aufruf von Drupal.attachBehaviors erfordern, wenn Sie das Widget ausblenden und anzeigen. Das gleiche Verhalten bleibt jedoch bestehen, wenn der Wechsel mehr als einmal erfolgt und Sie nicht riskieren, dasselbe Element mehrfach mit demselben Verhalten zu verknüpfen.
, die nicht zur Arbeit erscheint. Anscheinend wird die URL irgendwo im JavaScript gespeichert und nicht erneut aus dem Eingabefeld gelesen. – mikl
Sie müssen auch die Klasse "autocomplete-processed" aus dem ausgeblendeten Feld entfernen und dann das Autocomplete-Verhalten durch Aufrufen von 'Drupal.behaviors.autocomplete (document);'. – sepehr
es funktioniert, aber eine neue URL wird bei jeder Änderung registriert, wenn 2 mal es wieder angeschlossen wird, werden insgesamt 3 Anrufe an Server –