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 node
item yang dipilih. Anda harus bisa mendapatkan tid
dari salah satu properti pada objek itu.
Drupal 7 dan 8 menyediakan pembuatan acara autocomplete jQuery tanpa kode khusus saat ini.
Di Drupal 7, autocompleteSelect
acara ditambahkan dalam masalah Drupal # 365241 . (Clive menyebutkan ini sedang berlangsung ketika dia memposting tanggapannya.)
Drupal 8 menggunakan widget autocomplete jQuery UI . The autocompleteclose
event adalah event jQuery UI yang paling mirip dengan D7 autocompleteSelect
acara. Di D8 UI jQueryautocompleteselect
juga akan dipicu tetapi panggilan balik Ajax tidak akan menerima nilai status formulir yang diperbarui. autocompleteclose
panggilan 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 autocompleteSelect
acara 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');
}
})