回答:
現時点ではイベントはトリガーされません(7.34以降)が、この問題には次のようなものを使用できるようにするパッチがあります。
$('#input-id').on('autocompleteSelect', function(event, node) {
});
またはjQueryの古いバージョンで使用している場合
$('#input-id').bind('autocompleteSelect', function(event, node) {
});
node
選択したアイテムはどこにありますか。tid
そのオブジェクトのプロパティの1つからを取得できるはずです。
Drupal 7および8は、現時点ではカスタムコードなしでjQueryオートコンプリートイベントを生成します。
Drupal 7では、autocompleteSelect
イベントはDrupalの問題#365241に追加されました。(クライヴはこれが進行中であると述べ、彼の返事を投稿した。)
Drupal 8はjQuery UI オートコンプリートウィジェットを使用します。このautocompleteclose
イベントは、D7 autocompleteSelect
イベントに最も類似したjQuery UI イベントです。D8ではjQuery UI autocompleteselect
イベントもトリガーされますが、そのイベントのAjaxコールバックは更新されたフォームの状態値を受け取りません。autocompleteclose
コールバックには、更新されたフォームの状態値が提供されます。これは通常必要な値です。
他の回答が示しているように、jQuery on eventハンドラーまたは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');
}
})