10

我有一个带有单个暴露过滤器(选择)的视图。当用户单击“应用”时,它使用 ajax 重新填充。我希望他们不必单击它并在选择更改时重新填充。我假设我将或多或少需要一些像这样的 JS(尽管这似乎不太有效):

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

首先,我认为这样做可以,但它没有被提交。有谁知道为什么?

其次,注入该代码的最佳方法是什么?我正在考虑使用 View 页脚,因为它很容易,但还有其他更好的想法吗?

更新:上面的代码正在工作(通过视图页脚注入),但只是第一次。我猜 select 被 ajax 调用覆盖,但行为没有被重新附加(或其他东西)。唔...

更新#2:为简单起见,我将放弃 ajax。

4

5 回答 5

11

为了在 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' 替换为一些唯一标识符,这样您就不会覆盖其他行为。

于 2009-09-28T19:36:11.403 回答
6

我认为这个功能开箱即用(至少在 Drupal 7 中)。编辑您的视图并在“ 公开的表单”下选择

Exposed form style -> Settings

然后有一个选项

Autosubmit

您可以在其中选择是否要“更改元素后自动提交表单”。也可以使用该选项

Hide submit button

“如果启用了 javascript,则隐藏提交按钮”对此进行了解释。

于 2012-07-19T10:32:16.253 回答
1

@pradeep:您可以将其插入到您的视图的主题视图模板(请参阅http://www.group42.ca/theming_views_2_the_basics)中。(抱歉,根据论坛用户界面无法将其写为评论)

于 2011-09-24T17:59:36.927 回答
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');
    });
}

};

于 2016-11-30T20:46:30.123 回答
0

更好的暴露过滤器的自动提交在初始页面加载时不起作用,但在您更改或单击选项时起作用。

于 2019-11-07T05:24:54.497 回答