$( "input[role=submit_action], button[role=submit_action], div[role=submit_action], span[role=submit_action], a[role=submit_action]").live( "click", function() {
});
这也是:
$( "input[role=submit_action], input[role=submit_require]").live( "click", function() {
if ($(this).attr('role') == "submit_action") {
// do this...
}
else {
// do this...
}
});
例如,缩写可以是:
$("input[role=(submit_action|submit_require)]"
答案 0 :(得分:5)
我在这里使用.delegate()
来提高效率(不要遍历最初执行选择器的每个DOM元素),如下所示:
$(document.body).delegate("[role=submit_action]", "click", function() {
//do stuff
});
这里的区别在于,与.live()
不同,它在启动时便宜很多,因为$("role=submit_action]")
(甚至在.live()
调用之前)必须迭代DOM检查中的所有元素对于role
属性,您可以使用.delegate()
绕过此费用。
由于表现是一个问题,不要相信我的话,在这里自己测试一下:
http://jsperf.com/live-vs-delegate-test
答案 1 :(得分:2)
我不会改变第一个,因为它的效率是如此。它可以缩短使用:
$('[role=submit_action]')
..但是这需要遍历DOM中的每个元素,这会大大减慢它的速度。你可以在第二个例子中使用带有选择器的启动,这可能仍然是好的:
$('input[role^=submit_]')...
无论如何,如果没有破坏,请不要修理它。 :)
答案 2 :(得分:2)
如果没有其他元素可以包含此role
,则可以将选择器编写为
$( "[role=submit_action]").live( "click", function() {});
然而,我不会,因为它在绑定功能之前进行了相当昂贵的搜索。请改用delegate
:
$('body').delegate('[role=submit_action]','click',function() {});
这在功能上是等效的,除了它在绑定处理程序之前不需要昂贵的DOM遍历。
答案 3 :(得分:0)
尝试:
$( "[role=submit_action]").live("click", function() {
//...
});
对于第二个,您是否尝试在同一页面上使用它们?