Tenga una mirada en 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');
});
};
atributo de valor de la entrada se utiliza para crear ACDB, que es una memoria caché de valores para ese camino autocompletar (URI). Que se utiliza en la función Drupal.jsAC para enlazar eventos KeyDown, keyup y el desenfoque del elemento con desencadena la operación de autocompletar ajax (que almacena en caché sus valores en el objeto ACDB para ese elemento), se abre ventanas emergentes, etc.
/**
* 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(); });
};
Lo que tendrá que hacer es cambiar el valor de la entrada y también volver a conectar el comportamiento. Volverá a conectar el comportamiento eliminando la clase '.autocomplete-processed' en el elemento de entrada del campo de texto de autocompletar y luego llamará a Drupal.attachBehaviors (thatInputElement).
Esto puede no funcionar. Las cosas pueden ir muy mal si agrega el mismo comportamiento al mismo elemento una y otra vez. Puede ser más sensato crear diferentes campos de autocompletar y simplemente ocultarlos y mostrarlos en función del valor de la selección. Esto aún requeriría llamar a Drupal.attachBehaviors cuando oculte y muestre el widget, pero el mismo comportamiento permanecería adjunto si el cambio ocurriera más de una vez, y no correría el riesgo de asociar el mismo comportamiento al elemento varias veces.
que no aparece para trabajar. Aparentemente, la URL se almacena en algún lugar de JavaScript y no se vuelve a leer desde el campo de entrada. – mikl
También debe eliminar la clase 'autocomplete-processed' del campo oculto y luego volver a conectar el comportamiento de autocompletar llamando' Drupal.behaviors.autocomplete (document); '. – sepehr
funciona, pero se registra una nueva url en cada cambio, si se vuelve a adjuntar 2 veces, se realizarán 3 llamadas totales al servidor –