【问题标题】:jQuery - Multiple Triggers for the Same FunctionjQuery - 同一个函数的多个触发器
【发布时间】:2010-12-04 01:37:51
【问题描述】:

我正在开发一些 jQuery,但我是初学者,所以它有点臃肿而且不是很优雅。基本上,我希望在提交两种表单之一或单击它们的提交按钮时使 cookie 值无效。但是我不知道如何合并函数的条件,这样我只需要写出一次函数,所以我能做的最好是这样:

$('form#searchform-basic').submit(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-basic a.search').click(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-advanced').submit(function() {
    $.cookie('tab_cookie', null);
});
$('form#searchform-advanced input#search-button-submit').click(function() {
    $.cookie('tab_cookie', null);
});

一定有更好的方法,对吧?

在有人问之前,是的,您会认为您只需要知道何时提交表单。但是省略单击事件意味着单击提交按钮时该函数不会运行。我不知道为什么会这样,就是这样。

【问题讨论】:

    标签: jquery forms cookies


    【解决方案1】:

    给你的函数起个名字,像这样:

    function ClearCookie() {
        $.cookie('tab_cookie', null);
    }
    

    这样,您可以根据需要从多个事件中调用它。

    $('form#searchform-basic').submit(ClearCookie);
    $('form#searchform-basic a.search').click(ClearCookie);
    $('form#searchform-advanced').submit(ClearCookie);
    $('form#searchform-advanced input#search-button-submit').click(ClearCookie);
    

    瞧!

    更进一步,您可以组合调用相同事件(提交或点击)的选择器,如下所示:

    $('form#searchform-basic, form#searchform-advanced').submit(ClearCookie);
    $('form#searchform-basic a.search, form#searchform-advanced input#search-button-submit').click(ClearCookie);
    

    我可能会放弃表单标签而只使用 ID,但这只是我。

    $('#searchform-basic, #searchform-advanced').submit(ClearCookie);
    $('#searchform-basic a.search, #searchform-advanced input#search-button-submit').click(ClearCookie);
    

    【讨论】:

    • 谢谢!这几乎是完美的,除了我通过反复试验发现用单引号和逗号而不是逗号分隔标识符不是正确的语法。另外,我希望有一种方法可以将 .click() 和 .submit() 事件合并为一个,例如“如果发生提交或单击,则清除 cookie。”
    • 感谢@Tom,我进行了编辑以修复语法。据我所知,您不能将两个不同的事件合并到一个语句中。
    【解决方案2】:
    $('oneselector','second','third').click(function() {
        $.cookie('tab_cookie', null);
    });
    

    试试看

    【讨论】:

      【解决方案3】:

      因为点击提交按钮实际上是提交表单,所以您不需要将任何点击处理程序绑定到提交按钮,只需将您的控件绑定到表单的提交操作(这是由于单击提交按钮)。

      要将其简化为一行,请在表单中添加一个类,例如 clear-cookie

      <form id="searchform-basic" class="clear-cookie"> ... </form>
      <form id="searchform-advanced" class="clear-cookie"> ... </form>
      
      $("form.clear-cookie").submit(function(){
        $.cookie('tab_cookie', null);
      });
      

      更多的选择器,但是,如上所述,您可以执行以下操作:

      $("#searchform-basic, #searchform-advanced").submit( ... );
      

      但我发现我通常使用类对相关元素进行分组。

      【讨论】:

      • 就像我在原帖中所说的那样,.submit() 和 .click() 在我的站点中并没有完成同样的事情。我不知道为什么。所以是的,除了表单的提交处理程序之外,我确实需要将点击处理程序绑定到提交按钮。
      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 2011-02-01
      • 2017-05-27
      • 2019-04-07
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多