给出以下HTML代码段:
Goggles <input type="checkbox" id="id_goggles_opt_in" name="goggles_opt_in">
Approved <input type="checkbox" id="id_approved" name="approved">
和这个JavaScript:
$('#id_approved').live('click', function() {
alert('click is fine when selected by ID');
});
var $formInputs = $('.form input[type=text], .form input:file, .form textarea, .form select, .form input[type=checkbox]');
var $checkboxes = $formInputs.filter('[type=checkbox]');
console.log("This selector actually finds the elements: " + $checkboxes.size());
console.log($checkboxes)
$checkboxes.live('click', function() {
alert('bizarrely this is never called');
});
第二个警报永远不会被触发。 #jquery regularrs建议我只使用.delegate
,但为什么这不起作用?
关于JSFiddle的示例:http://jsfiddle.net/amA3h/
答案 0 :(得分:5)
不支持DOM遍历方法来查找要发送到.live()的元素。相反,应始终在选择器后直接调用.live()方法...
答案 1 :(得分:3)
Mully是对的 - 使用.filter()
干扰.live()
事件。
这有效:
var $checkboxes = $('.form input[type=checkbox]');
$checkboxes.live('click', function() {
alert('bizarrely this is never called');
});
http://jsfiddle.net/mblase75/amA3h/5/
或者,要做.delegate
- 样式:
$('.form').delegate('input:checkbox','click', function() {
alert('bizarrely this is never called');
});