我正在構建一個帶有2個依賴字段的表單 - 第一個過濾第二個表單。我使用Drupal 7 Form API並使用'#ajax'屬性來執行第一個字段。 第一個字段是Drupal自動完成,可能是因爲這個「更改」事件沒有觸發。在Firefox中它工作正常 - 在Chrome和IE中它沒有。Chrome和IE不會觸發Drupal 7中自動填充字段的「更改」事件
我試着在我的js腳本中檢查change事件,但它根本沒有被觸發。
任何想法?
我正在構建一個帶有2個依賴字段的表單 - 第一個過濾第二個表單。我使用Drupal 7 Form API並使用'#ajax'屬性來執行第一個字段。 第一個字段是Drupal自動完成,可能是因爲這個「更改」事件沒有觸發。在Firefox中它工作正常 - 在Chrome和IE中它沒有。Chrome和IE不會觸發Drupal 7中自動填充字段的「更改」事件
我試着在我的js腳本中檢查change事件,但它根本沒有被觸發。
任何想法?
嘗試使用「autocompletechange」事件。
Drupal.jsAC.prototype.select = function (node) {
this.input.value = $(node).data('autocompleteValue');
};
到:有的像泰德代碼
$('your selector').on('autocompletechange', function() {
code;
});
在/misc/autocomplete.js
變化使文件在以下更改
Drupal.jsAC.prototype.select = function (node) {
this.input.value = $(node).data('autocompleteValue');
$(this.input).trigger('change');
};
這將使當點擊自動完成列表中的選項時,更改觸發器將工作。
爲了使改變觸發時,它選擇與方向鍵並按下Enter鍵,你需要添加觸發器在hidePopup函數變化:
Drupal.jsAC.prototype.hidePopup = function (keycode) {
// Select item if the right key or mousebutton was pressed.
if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) {
this.input.value = $(this.selected).data('autocompleteValue');
}
// Hide popup.
var popup = this.popup;
if (popup) {
this.popup = null;
$(popup).fadeOut('fast', function() { $(popup).remove(); });
}
this.selected = false;
$(this.ariaLive).empty();
};
到:
Drupal.jsAC.prototype.hidePopup = function (keycode) {
// Select item if the right key or mousebutton was pressed.
if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) {
this.input.value = $(this.selected).data('autocompleteValue');
$(this.input).trigger('change');
}
// Hide popup.
var popup = this.popup;
if (popup) {
this.popup = null;
$(popup).fadeOut('fast', function() { $(popup).remove(); });
}
this.selected = false;
$(this.ariaLive).empty();
};
一旦您對autocomplete.js文件進行了這些更改,您應該可以像平常一樣調用.change觸發器。
Drupal 7自動完成使用事件autocompleteSelect
。這包括使用鼠標或鍵盤完成選擇和更改。根據您建立或更改表單的方式,您需要在不同的地方設置#ajax
屬性。將所有my_
前綴值替換爲您的代碼特定變量。
自己構建形式,代碼如下:
$form['my_field']['#ajax'] = array(
'event' => 'autocompleteSelect',
'callback' => 'my_callback',
'wrapper' => 'my_wrapper',
);
使用hook_form_FORM_ID_alter()
是這樣的:
$form['my_field']['my_language'][0]['target_id']['#ajax'] = array(
'event' => 'autocompleteSelect',
'callback' => 'my_callback',
'wrapper' => 'my_wrapper',
);