Risposte:
Nessun evento è attivato al momento (a partire da 7.34), ma c'è una patch su questo problema che dovrebbe permetterti di usare qualcosa come:
$('#input-id').on('autocompleteSelect', function(event, node) {
});
o se stai utilizzando la vecchia versione di jQuery
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
Dov'è node
l'elemento selezionato. Dovresti essere in grado di ottenere il tid
da una delle proprietà su quell'oggetto.
Drupal 7 e 8 forniscono al momento la generazione di eventi con completamento automatico jQuery senza codice personalizzato.
In Drupal 7, l' autocompleteSelect
evento è stato aggiunto nel numero Drupal # 365241 . (Clive ha detto che era in corso quando ha pubblicato la sua risposta.)
Drupal 8 utilizza il widget di completamento automatico dell'interfaccia utente jQuery . L' autocompleteclose
evento è l'evento dell'interfaccia utente jQuery più simile autocompleteSelect
all'evento D7 . In D8 autocompleteselect
verrà anche attivato l'evento dell'interfaccia utente jQuery ma un callback Ajax su di esso non riceverà i valori di stato del modulo aggiornati. autocompleteclose
i callback vengono forniti con valori di stato del modulo aggiornati, che di solito sono quelli desiderati.
Come indicato dalle altre risposte, è possibile utilizzare i dati degli eventi nel browser client utilizzando un gestore eventi jQuery o Drupal.behaviors ( Drupal 7 , Drupal 8 ). In Drupal 7 useresti l' autocompleteSelect
evento e su Drupal 8 autocompleteclose
.
Se hai bisogno del valore nel tuo codice PHP, è possibile utilizzare un callback Ajax. Ecco alcune indicazioni su come eseguire questa operazione in Drupal 7 o Drupal 8 .
Avevo bisogno di usare un comportamento per farlo funzionare (grazie al problema menzionato da Clive e questo commento: https://www.drupal.org/node/365241#comment-9575707 ):
Drupal.behaviors.autocompleteSupervisor = {
attach: function (context) {
$('#edit-field-foo-und-0-target-id', context).bind('autocompleteSelect', function(event, node) {
// Do custom stuff here...
var entity_id = $(this).val().replace($(node).text().trim(), '').replace(/\(|\)| /g, '');
});
}
};
In Drupal 8 questo si è spostato. È possibile ignorare la funzionalità con il seguente codice.
/**
* Handles an autocompleteselect event.
*
* Override the autocomplete method to add a custom event.
*
* @param {jQuery.Event} event
* The event triggered.
* @param {object} ui
* The jQuery UI settings object.
*
* @return {bool}
* Returns false to indicate the event status.
*/
Drupal.autocomplete.options.select = function selectHandler(event, ui) {
var terms = Drupal.autocomplete.splitValues(event.target.value);
// Remove the current input.
terms.pop();
// Add the selected item.
if (ui.item.value.search(',') > 0) {
terms.push('"' + ui.item.value + '"');
}
else {
terms.push(ui.item.value);
}
event.target.value = terms.join(', ');
// Fire custom event that other controllers can listen to.
jQuery(event.target).trigger('autocomplete-select');
// Return false to tell jQuery UI that we've filled in the value already.
return false;
}
Sostituisce il codice in core/misc/autocomplete.js
.
Quindi nel tuo codice puoi ascoltarlo
var field = jQuery('<field-selector>');
var lastField = ''
field.on('autocomplete-select', function() {
console.log("autocompleteSelect");
// Check that field actually changed.
if ($(this).val() != lastValue) {
lastValue = $(this).val();
console.log('The text box really changed this time');
}
})