2

我正在尝试将单击事件绑定到 jQuery (v1.8.18) 中的某些元素。我有两个与我的选择器匹配的元素,在我进行绑定时存在,但还有第三个元素最终会匹配我的选择器,但直到我注册后的某个时间点才会被标记事件。

当我只是使用:

$('.collapsible h2 > .ui-icon').bind('click', toggleCollapsibleList);

...然后它正确地绑定到提前存在的两个,但显然不绑定到第三个。当我使用:

$('.collapsible h2 > .ui-icon').live('click', toggleCollapsibleList);

...然后他们都没有被束缚。当我使用时:

$('.collapsible h2 > .ui-icon').on('click', toggleCollapsibleList);

...然后它的行为与 .bind() 相同。我已通过开发人员工具确认所有三个元素都存在于 DOM 中,并在页面完成加载后匹配选择器。有谁知道我可能做错了什么?

4

2 回答 2

3

jQuery.on()是在1.7中引入的,因此不推荐使用.live(). 如果您.on()希望它的行为类似于.live().

您实际上想要使用类似的.on()东西:

$(document).on('click', '.collapsible h2 > .ui-icon', toggleCollapsibleList);

以下内容取自 jQuery.live()文档

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+
于 2012-11-30T16:47:38.167 回答
0
// These will attach an event handler for all elements which match the 
// current selector NOW
$('.collapsible h2 > .ui-icon').bind('click', toggleCollapsibleList);
// is equivalent to
$('.collapsible h2 > .ui-icon').on('click', toggleCollapsibleList);


// These will attach an event handler for all elements which match the 
// current selector NOW AND IN THE FUTURE

// not recommended
$('.collapsible h2 > .ui-icon').live('click', toggleCollapsibleList); 
// is equivalent to
// recommended
$(document).on('click', '.collapsible h2 > .ui-icon', toggleCollapsibleList); 
于 2012-11-30T17:06:59.267 回答