2009-09-28 36 views
9

我有一個單一的暴露過濾器(選擇)的看法。當用戶點擊「應用」時,它使用ajax重新填充。我希望他們不必單擊它,只需在選擇更改時重新填充。我假設我要去需要一些JS或多或少像這樣的(儘管這並不完全似乎工作):drupal> views> exposed filter> submit on change

$('#edit-tid').change(function(){ 
    $('#views-exposed-form-MYVIEW-page-1').submit(); 
}); 

首先,我認爲會做到這一點,但它不是獲得提交。有人知道爲什麼

其次,注入代碼的最佳方式是什麼?我正在考慮使用View頁腳,因爲它很容易,但還有其他更好的點子嗎?

更新:上面的代碼工作(通過視圖頁腳註入),但只有第一次。我猜這個select被ajax調用覆蓋,但行爲沒有被重新連接(或者其他)。嗯...

更新#2:爲了簡單起見,我會拋棄ajax。

回答

10

爲了讓這段代碼在ajax調用後重新連接,它應該首先通過Drupal.behaviors進行連接。像這樣:

Drupal.behaviors.myCustomModule = function(context) { 
    $('#edit-tid', context).change(function(){ 
    $('#views-exposed-form-MYVIEW-page-1').submit(); 
    }); 
} 

請注意,上下文參數傳遞到選擇器。 Drupal.behaviors應該再次調用通過ajax加載的新內容。

更新:我沒有注意到你通過視圖頁腳插入了js。上面應該仍然有效,只需用一些唯一標識符替換'myCustomModule',這樣就不會覆蓋其他行爲。

+0

- 你能告訴我應該在哪裏寫這個函數嗎? – Hacker 2011-08-22 08:55:04

5

我覺得這個功能可以直接使用(至少在Drupal 7中)。編輯您的觀點,並在 裸露形式選擇

Exposed form style -> Settings 

然後有一個選項

Autosubmit 

:如果你想「自動提交一旦有修改的形式」你可以選擇。也有可能使用選項

Hide submit button 

這是解釋爲「隱藏提交按鈕,如果JavaScript已啓用」。

0

如果需要AJAX在您的展示圖

Drupal.behaviors.myCustomModule = { 
attach: function (context, settings) { 
    $('select[data-drupal-selector="edit-YOUR-FIELD"]', context).change(function(){ 
     $('#views-exposed-form-YOUR-VIEW-block-1 input.form-submit').trigger('click'); 
    }); 
} 

}改變選擇選項時工作;

相關問題