Answers:
目前(从7.34版开始)没有任何事件被触发,但是此问题上有一个补丁程序可以让您使用类似以下的内容:
$('#input-id').on('autocompleteSelect', function(event, node) {
});
或者如果您使用的是旧版jQuery
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
node
所选项目在哪里。您应该能够tid
从该对象的属性之一获取。
Drupal 7和8目前提供了jQuery自动完成事件生成功能,而无需任何自定义代码。
在Drupal 7中,该autocompleteSelect
事件已添加到Drupal问题#365241中。(克莱夫(Clive)在发表回应时说,这正在进行中。)
Drupal 8使用jQuery UI 自动完成小部件。该autocompleteclose
事件是最类似于D7 autocompleteSelect
事件的jQuery UI 事件。在D8中,jQuery UI autocompleteselect
事件也将被触发,但是其上的Ajax回调将不会接收更新的表单状态值。autocompleteclose
回调具有更新的表单状态值,通常是您想要的。
如其他答案所示,您可以使用事件处理程序上的jQuery或Drupal.behaviors(Drupal 7,Drupal 8)在客户端浏览器中使用事件数据。在Drupal 7中,您将使用该autocompleteSelect
事件;在Drupal 8中,您将使用该事件autocompleteclose
。
如果您需要PHP代码中的值,则可以使用Ajax回调。这是在Drupal 7或Drupal 8中如何执行此操作的一些说明。
我需要使用一种行为使其正常工作(由于Clive提到的问题以及此评论: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中,这已经发生了变化。您可以使用以下代码覆盖该功能。
/**
* 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;
}
覆盖中的代码core/misc/autocomplete.js
。
然后在您的代码中,您可以听
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');
}
})