Jawaban:
Tidak ada peristiwa yang dipicu saat ini (pada 7.34), tetapi ada tambalan tentang masalah ini yang seharusnya memungkinkan Anda menggunakan sesuatu seperti:
$('#input-id').on('autocompleteSelect', function(event, node) {
});
atau jika Anda menggunakan jQuery versi lama
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
Di mana nodeitem yang dipilih. Anda harus bisa mendapatkan tiddari salah satu properti pada objek itu.
Drupal 7 dan 8 menyediakan pembuatan acara autocomplete jQuery tanpa kode khusus saat ini.
Di Drupal 7, autocompleteSelectacara ditambahkan dalam masalah Drupal # 365241 . (Clive menyebutkan ini sedang berlangsung ketika dia memposting tanggapannya.)
Drupal 8 menggunakan widget autocomplete jQuery UI . The autocompletecloseevent adalah event jQuery UI yang paling mirip dengan D7 autocompleteSelectacara. Di D8 UI jQueryautocompleteselect juga akan dipicu tetapi panggilan balik Ajax tidak akan menerima nilai status formulir yang diperbarui. autocompleteclosepanggilan balik diberikan dengan nilai status formulir yang diperbarui, yang biasanya Anda inginkan.
Seperti jawaban lain telah ditunjukkan, Anda dapat menggunakan data acara di browser klien menggunakan jQuery on event handler, atau Drupal.behaviors ( Drupal 7 , Drupal 8 ). Di Drupal 7 Anda akan menggunakan autocompleteSelectacara tersebut, dan pada Drupal 8 autocompleteclose.
Jika Anda membutuhkan nilai dalam kode PHP Anda, panggilan balik Ajax dapat digunakan. Berikut adalah beberapa petunjuk tentang cara melakukan ini di Drupal 7 atau di Drupal 8 .
Saya perlu menggunakan perilaku untuk membuatnya berfungsi (berkat masalah yang disebutkan oleh Clive, dan komentar ini: 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, '');
});
}
};
Di Drupal 8 ini telah pindah. Anda dapat mengganti fungsionalitas dengan kode berikut.
/**
* 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;
}
Mengganti kode dalam core/misc/autocomplete.js .
Kemudian dalam kode Anda, Anda dapat mendengarkan
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');
}
})