带有jquery事件的meteor只运行一次

时间:2016-04-18 13:11:08

标签: jquery events meteor

我使用meteor 1.3,我不得不整合一个"网络模板"进入我的流星应用程序,这个" web模板"有一个custom.js文件包含j个查询事件,但在整合" web模板"之后,js文件中的那些事件只运行一次,有没有办法解决这个问题,这个js文件包含了很多将事件移入我的"流星模板事件"将是非常复杂的。 感谢

1 个答案:

答案 0 :(得分:1)

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

您需要做的是使用委派事件,即使用jquery .on()完成。

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

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

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

因此,您可以使用哪个处理程序指定要处理哪个元素的事件。这将在meteor修改DOM之后发挥作用。

例如,如果你有这个:

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

您必须将其更改为:

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

这样,只要具有Id'#btnOk'的DOM元素位于'#cotnainer'内,处理程序就会被执行,无论对象是手动还是动态创建。

当然,您必须确保#container元素存在,并且不会被任何其他元素替换。要做到这一点,也许你必须遍历DOM树,例如使用jQuery .parent()