【问题标题】:JQuery: event listener removed after display:none?JQuery:显示后删除事件侦听器:无?
【发布时间】:2014-08-27 05:47:58
【问题描述】:

我有一个使用 jQuery bind() 定义的带有“单击”事件侦听器的按钮。事件侦听器工作正常,直到我(以编程方式)在父元素上执行display:none(有效地隐藏父元素和按钮)。当我取消隐藏父元素 (display:block) 时,按钮不再起作用。

示例:假设我有以下 HTML 标记和以下事件侦听器:

$( ".my-button" ).bind( "click", myFunction );

<div class="container">
  <div class="my-button">Button</div>
</div>

如果我用另一个 jQuery 函数做一个

$(".container").css('display', 'none');

事件监听器消失。这种行为是预期的吗?每个display:none之后是否需要重新绑定事件监听器?

【问题讨论】:

  • 你能重现这个问题吗?
  • 浏览器控制台有错误吗?
  • 使用 $._data('.my-button', 'events'); 取消隐藏后检查事件监听器;
  • 请提供小提琴或代码示例。理论上绑定事件不应该那样消失。
  • 您是否尝试将$( ".my-button" ).bind( "click", myFunction ); 切换为$( ".my-button" ).on( "click", myFunction );?这可能会解决绑定问题。

标签: javascript jquery css


【解决方案1】:

http://jsfiddle.net/gadL2rag/

$(".container").css('display', 'none'); 

不会取消绑定事件,它会隐藏 .container div 及其子项。但是在你调用 $(".container").css('display', 'block'); 再次,事件仍然存在,您不必再次绑定它。希望对您有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2022-08-03
    • 2018-06-29
    • 2023-02-04
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多