如果我像这样使用jQuery的.on()
函数(还有更多,但这是提取的主要问题区域):
$(document).on("click",
$("#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a").not(".secitem-mid a"),
function clicker(event, sData) {
var $this = $(this);
sHREF = $this.attr("href");
alert(sHREF);
} );
我没有定义,那么什么是获取被点击元素的最好方法呢?我需要.on()
,以便它总是发生,显然,而不是每次加载新数据时都必须将它附加到所有元素(这是通过雅虎!商店,所以有必要这样做)。谢谢。
发布于 2012-07-09 23:17:04
on
的第二个参数是一个选择器,而不是jQuery对象;它用于事件委托。
如果你打算直接把它们联系起来,那么:
$("#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a").not(".secitem-mid a").on("click", function clicker(event, sData) {
var $this = $(this);
sHREF = $this.attr("href");
alert(sHREF);
});
如果您真的想使用事件委托,.not
部件会让它变得有点棘手,因为(取决于您的标记)您可能需要在主系列中的每个选择器上重复它。由于这很难看,您最好在处理程序函数中处理这个特定的情况:
$(document).on("click", "#contcont a, #leftnav li a, #leftnav li ul a, #mainarea-home a", function clicker(event, sData) {
var $this = $(this);
// Handle the "not" part
if (!$this.is(".secitem-mid a")) {
sHREF = $this.attr("href");
alert(sHREF);
}
});
但是:通常最好将委托放在离您想要处理的元素最近的容器中。如果您的#contcont
、#leftnav
和#mainarea-home
元素不是动态的,我可能会考虑将委托放在它们而不是document
中,例如:
$("#contcont" ).on("click", "a:not(.secitem-mid a)", clicker);
$("#leftnav" ).on("click", "li a:not(.secitem-mid a)", clicker);
$("#mainarea-home").on("click", "a:not(.secitem-mid a)", clicker);
function clicker(event, sData) { ... }
注意,我只需要三个,而不是四个;#leftnav li a
已经涵盖了您的#leftnav li ul a
选择器。
还有一点离题:注意您使用的是命名函数表达式,它可以是tricky on IE8 and earlier。我上面的最后一个例子去掉了这一点,使其成为一个函数声明。
https://stackoverflow.com/questions/11397907
复制相似问题