【问题标题】:meteor with jquery events runs only once带有 jquery 事件的流星只运行一次
【发布时间】:2016-08-10 06:01:02
【问题描述】:

我正在使用流星 1.3,我必须将“网络模板”集成到我的流星应用程序中,这个“网络模板”有一个 custom.js 文件,其中包含 j 个查询事件,但在集成“网络模板”之后,js文件中的那些事件只运行一次,有没有办法解决这个问题,这个js文件包含很多行,将事件移动到我的“流星模板事件”中会非常复杂。 谢谢

【问题讨论】:

    标签: jquery events meteor


    【解决方案1】:

    问题是事件直接绑定到模板内的 DOM 元素,当流星改变 DOM 元素时,绑定丢失。

    你要做的就是使用委托事件,这是通过使用jquery .on()来完成的。

    您需要做的是处理固定 DOM 元素中的事件,即您的“更改 HTML”父元素。当该元素内部发生事件时,该事件“冒泡”到处理它的固定 DOM 元素。该事件携带有关启动它的 DOM 元素的信息,因此 on 订阅可以调用正确的处理程序。

    注意$('#fixedElement').on(event, selector, handler) 指定:

    • 将“捕捉”冒泡事件的固定元素
    • 您要处理的事件
    • 过滤固定元素的后代元素的选择器
    • 要执行的处理程序

    因此,您可以指定在哪个元素上处理哪个事件,使用哪个处理程序。这将在流星修改 DOM 后起作用。

    例如,如果你有这个:

    $('#btnOk').click(function() { alert('Clicked OK!`); });
    

    你必须把它改成这样:

    $('#container').on('click', '#btnOk', function() { alert('Clicked OK!`); });
    

    这样,只要有一个 ID 为“#btnOk”且位于“#cotnainer”内的 DOM 元素,处理程序就会被执行,而不管该对象是事先存在的还是动态创建的。

    当然,您必须确保#container 元素存在,并且没有被任何其他东西替换。为此,您可能必须遍历 DOM 树,例如使用 jQuery .parent()

    【讨论】:

    • 汉克斯,我试过了,但它不起作用。 $(myElementId).on('click', function(){//做一些事情});
    • 需要指定第二个参数。请参阅更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多