Yanıtlar:
Şu anda hiçbir olay tetiklenmiyor (7.34 itibariyle), ancak bu konuda aşağıdaki gibi bir şey kullanmanıza izin veren bir yama var :
$('#input-id').on('autocompleteSelect', function(event, node) {
});
veya jQuery'nin eski sürümünü kullanıyorsanız
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
node
Seçilen öğe nerede . Bu tid
nesnenin özelliklerinden birini alabilmeniz gerekir .
Drupal 7 ve 8, şu anda herhangi bir özel kod olmadan jQuery otomatik tamamlama olay oluşturma olanağı sağlar.
Drupal 7'de, autocompleteSelect
olay 365241 numaralı Drupal sayısında eklendi . (Clive, yanıtını gönderdiğinde bunun devam ettiğini belirtti.)
Drupal 8, jQuery UI otomatik tamamlama widget'ını kullanır . autocompleteclose
Olay D7 en çok benzeyen jQuery UI olaydır autocompleteSelect
olay. D8'de jQuery UI autocompleteselect
olayı da tetiklenir, ancak üzerindeki Ajax geri çağırma güncellenmiş form durumu değerlerini almaz. autocompleteclose
Geri aramalar genellikle istediğiniz gibi güncellenmiş form durumu değerleri ile sağlanır.
Diğer yanıtların belirttiği gibi, olay işleyicisindeki bir jQuery veya Drupal.behaviors ( Drupal 7 , Drupal 8 ) kullanarak istemci tarayıcısındaki olay verilerini kullanabilirsiniz . Drupal 7'de autocompleteSelect
etkinliği ve Drupal 8'de kullanırsınız autocompleteclose
.
PHP kodunuzdaki değere ihtiyacınız varsa, bir Ajax geri çağrısı kullanılabilir. Drupal 7 veya Drupal 8'de bunun nasıl yapılacağı ile ilgili bazı talimatlar .
Çalışması için bir davranış kullanmam gerekiyordu (Clive tarafından bahsedilen sorun sayesinde ve bu yorum: 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, '');
});
}
};
Drupal 8'de bu hareket etti. Aşağıdaki kodla işlevselliği geçersiz kılabilirsiniz.
/**
* 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;
}
İçindeki kodu geçersiz kılar core/misc/autocomplete.js
.
Sonra kodunuzda dinleyebilirsiniz
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');
}
})