我有一个带有一个暴露过滤器的视图(一个选择)。当用户单击“应用”时,它使用ajax重新填充。我希望他们不必点击它,只需在更改选择时重新填充。我假设我需要一些或多或少像这样的JS(虽然这似乎不太合适):</ p>
$('#edit-tid').change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
首先,我认为会这样做,但它没有被提交。谁知道为什么?
其次,注入该代码的最佳方法是什么?我正在考虑使用View页脚,因为它很简单,但还有其他更好的想法吗?
更新:上面的代码正在工作(通过视图页脚注入),但只是第一次。我猜选择被ajax调用覆盖了,但是行为没有被重新连接(或其他东西)。嗯...
更新#2:为了简单起见,我要放弃ajax。
答案 0 :(得分:10)
为了在ajax调用之后重新附加此代码,它最初应该通过Drupal.behaviors附加。像这样:
Drupal.behaviors.myCustomModule = function(context) {
$('#edit-tid', context).change(function(){
$('#views-exposed-form-MYVIEW-page-1').submit();
});
}
请注意,context参数将传递给选择器。应该通过ajax加载的新内容再次调用Drupal.behaviors。
更新:我没有注意到您是通过视图页脚插入js的。上面应该仍然有用,只需用一些唯一标识符替换'myCustomModule',这样就不会覆盖其他行为。
答案 1 :(得分:5)
我认为这个功能开箱即用(至少在Drupal 7中)。编辑您的视图 外露表单选择
Exposed form style -> Settings
然后有一个选项
Autosubmit
您可以选择是否“在更改元素后自动提交表单”。也可以使用选项
Hide submit button
由“启用javascript时隐藏提交按钮”解释。
答案 2 :(得分:1)
@pradeep:您可以将其插入视图的主题视图模板(请参阅http://www.group42.ca/theming_views_2_the_basics)。 (对不起,根据论坛ui不能写这个评论)
答案 3 :(得分: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');
});
}
};
答案 4 :(得分:0)
自动提交更好的暴露过滤条件不适用于初始页面加载,但在您更改或单击选项时可以使用。