2016-04-18 46 views
0

我使用流星1.3,我必须在我的流星应用中集成一个“web模板”,这个“web模板”有一个custom.js文件,女巫包含j个查询事件,但在集成了“web模板”之后,js文件中的这些事件只运行一次,是否有办法解决这个问题,这个js文件包含很多行,将事件移动到我的“流星模板事件”中会非常复杂。 谢谢流星与jquery事件只运行一次

回答

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' DOM元素是在'#cotnainer'里面,处理程序将被执行,而不管之前存在的对象是存在还是正在被创建。

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

+0

hanks,我试过了,但它不起作用。 $(myElementId).on('click',function(){//做一些事情}); – nemrrached

+0

您需要指定第二个参数。请参阅最新的答案。 – JotaBe

+0

Thnaks,它的工作 – nemrrached