【问题标题】:two .on event handlers, only 1 firing两个 .on 事件处理程序,只有 1 个触发
【发布时间】:2012-02-22 06:35:38
【问题描述】:

我有两个事件处理程序:

$('body').on("blur", ".required", {requiredBlur: true}, checkData);
$('body').on("click", 'input[name="personality"]', {personalityClick:true}, checkData);

.required 是众多输入文本字段之一,input[name="personality"] 是一系列复选框。因此,当.required 输入文本字段处于焦点位置并且我单击其中一个复选框时,会触发模糊事件。但是单击事件不会为复选框触发。所以实际上,我必须点击一个复选框两次才能选中它。

应该同时开火还是我错过了什么?

麦克

【问题讨论】:

    标签: jquery


    【解决方案1】:

    试试这个

    $('.required').live('change', {requiredBlur: true}, checkData);
    $('input[name="personality"]').live('click', {personalityClick: true}, checkData)
    

    【讨论】:

    • mmm...live() 已弃用,取而代之的是 on()
    • @elclanrs 它也是,该死的 API 改变了。
    • 那行得通……谢谢。但是 API 说“从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。”
    【解决方案2】:

    根据 Quirksmode,如果用户使用鼠标 (source),则在 Firefox Mac 或 Webkit (Chrome/Safari) 中的单选按钮和复选框上不起作用。这意味着您将不得不依赖最有可能获得全面报道的change 事件。

    在我的simple demo on 中,这可以正常工作,但您必须确保您的逻辑支持事件触发比您最初设计的要多得多的事实。参考这里是good explanation of the different way to attach handles using jQuery

    【讨论】:

    • OP 在文本字段上使用模糊并单击复选框。这两个都应该工作。您的评论是关于一个复选框的模糊,这不是这里使用的。
    【解决方案3】:

    我想通了。我将每个事件处理程序绑定到不同的函数。因此,我没有将每个事件绑定到 checkData(),而是创建了两个单独的函数,每个事件一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多