在我的应用程序中,我使用样式锚标签与按钮一样。我需要能够禁用按钮,但锚标签没有禁用属性。我尝试过的方法是在锚点击事件中使用preventDefault(),如下所示:
$('a.disabled').click(function (e) {
e.preventDefault();
});
这不会禁用该链接。但是,如果我只使用'a'选择器$('a').click(function()...
,它会禁用链接。我认为这与事件的优先级或基于选择器的事件排序有关。
任何人都知道解决这个问题吗?
更新
我刚刚意识到上面的代码在引用选择器中的锚点id时有效,这再次让我相信它与CSS选择器优先级有关,即id引用样式覆盖类样式等。
答案 0 :(得分:4)
我猜你在绑定click事件处理程序之后设置了disabled
类。如果您的元素与绑定时的选择器不匹配,则无效。如果您希望运行处理程序,以防您的元素将来与匹配,,则需要使用live()。
$('a.disabled').live("click", function(e){
e.preventDefault();
});
答案 1 :(得分:1)
似乎你没有将disabled
类设置为锚点。你确定它们看起来像
<a href="" class="disabled"></a>
答案 2 :(得分:0)
即使您在同一个链接上有多个事件,但这个事件并不是第一个执行的,因此preventDefault()应该可以正常工作;因为默认操作是在整个事件队列完成运行后完成的。
我认为发生的事情是你的事件永远不会发生;确保您已将禁用的课程影响到您的链接
<a href="..." class="disabled"></a>
并且您没有任何事件在其运行期间取消队列。这是你应该寻找的:
event.stopPropagation() // stop event bubbling, prevent the event to apply on his parent eg if your <a> is in a div, prevent the div click event queue to run -- SHOULDN'T BE YOUR PROBLEM
event.stopImmediatePropagation() // same as stopPropagation() and in addition stop the event queue on this element (so if you have 3 clicks event on your link and the first calls this, the other two won't run)
return false; // fully cancel the event, has the effect to also stop the event queue, similar to calling preventDefault() AND stopImmediatePropagation() -- SHOULDN'T BE YOUR PROBLEM
要100%确定您可以通过将链接更改为<a href="#" class="disabled>
(以便页面不会重新加载)并在活动期间执行console.log('test')
来确认您的活动是否正在运行。如果未调用,则不会受到影响或已被取消。