2014-06-16 34 views
1

据我所知,它建议使用人体作为委托。对()事件:使用身体作为委托时选择特定元素

$('body').on('click', 'button', function() { 
    $('input[type="checked"]').removeAttr('checked'); 
}); 

我在哪里遇到麻烦试图选择特定的时元素但属于同一类型。因此,举例来说,如果我有一个具有唯一类,ID等的按钮,我最终选择DOM中的第一个按钮。

$('body').on('click', $('button#clear'), function() { 
    $('input[type="checked"]').removeAttr('checked'); 
}); 

使用.on()时,是否有任何解决方法?

奖励:有没有时间,你不应该用身体作为代表?如果是的话,第二个最佳选择是什么?

+1

你只需要使用事件代表团如果在绑定处理程序的元素不存在,或者如果你想在同一处理程序绑定到许多要素。如果两者都不是,则直接绑定处理程序。 –

+1

'$(document)'是另一个。尤其是在动态添加元素的情况下,如果您不知道确切的地方... –

+0

@NikTerentyev谢谢!你怎么能够在评论btw格式的代码?直到现在,从来不知道这是可能的。 –

回答

1

body不建议本身,它只是一个安全的赌注,它会工作,因为你的目标元素是可能的body一个孩子 - 在现实中,你应该使用静态容器为您的AJAX内容,你最初的选择如:

<div id="container"> 
    <!--I GET POPULATED WITH AJAX CONTENT--> 
    <input id="ajaxInput" /> <!--I came from an AJAX call--> 
</div> 

现在你可以使用

$("body").on("click", "#ajaxInput", function() { }); 

但是,这将每次单击body时间运行的检查。一个更好的选择应该是:

$("#container").on("click", "#ajaxInput", function() { }); 
+0

有没有什么办法可以选择jQuery对象:$('button:first')还是仅限于ID和类? –

+1

@CarlEdwards:您可以使用jQuery支持的任何选择器:https://api.jquery.com/category/selectors/,甚至可以创建自己的伪选择器。 –

+0

非常感谢Felix! –