2013-03-15 53 views
0

我正在構建一個帶有2個依賴字段的表單 - 第一個過濾第二個表單。我使用Drupal 7 Form API並使用'#ajax'屬性來執行第一個字段。 第一個字段是Drupal自動完成,可能是因爲這個「更改」事件沒有觸發。在Firefox中它工作正常 - 在Chrome和IE中它沒有。Chrome和IE不會觸發Drupal 7中自動填充字段的「更改」事件

我試着在我的js腳本中檢查change事件,但它根本沒有被觸發。

任何想法?

回答

-1

嘗試使用「autocompletechange」事件。

Drupal.jsAC.prototype.select = function (node) { 
    this.input.value = $(node).data('autocompleteValue'); 
}; 

到:有的像泰德代碼

$('your selector').on('autocompletechange', function() { 
    code; 
}); 
0

在/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觸發器。

0

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', 
);