的第二个参数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 ul a
选择器已被#leftnav li a
覆盖。
而且只是有点离题:意识到你正在使用命名的函数表达式,它可以是tricky on IE8 and earlier。我上面的最后一个例子消除了这一点,使其成为函数而不是声明。
使用'event' obj,你在'on()' – gorelative 2012-07-09 15:12:31
发布html代码。你也有点击标签中的href属性吗? – kiranvj 2012-07-09 15:15:20
@freakish代码不好。选择器参数无效,因此被忽略。这导致直接绑定到文档的点击事件处理程序 - 因此未定义的'href'属性 - 而不是委托给锚点。 “代码运行”并不代表“代码是正确的”。 – 2012-07-09 15:24:00