Javascript 如何使用jQuery禁用多个链接?

Javascript 如何使用jQuery禁用多个链接?,javascript,jquery,css,Javascript,Jquery,Css,我有以下HTML: <a title="Login" data-href="/MyAccount/Access/Login" data-title="Admin" data-entity="n/a" id="loginLink" class="nav-button dialogLink"><b>Login</b></a> <a title="Register" data-href="/MyAccount/Access

我有以下HTML:

<a title="Login" data-href="/MyAccount/Access/Login" 
   data-title="Admin" data-entity="n/a" 
   id="loginLink" class="nav-button dialogLink"><b>Login</b></a>

<a title="Register" 
   data-href="/MyAccount/Access/Register" 
   data-title="Admin" data-entity="n/a"
   id="registerLink" class="nav-button dialogLink"><b>Register</b></a>
它正确调用对话框,但不禁用链接,如果 多次单击按钮会调用多个对话框
盒子。我做错什么了吗?我不明白为什么它不起作用。

你需要这样做

$("#loginLink, #registerLink").click(function(e) {
    e.preventDefault();
    dialog(this);
});

必须使用jQuery的
on()
off()
方法绑定/解除绑定事件。设置
disabled
属性对链接没有影响,单击事件仍将被触发

您可以在此处找到说明和演示:

jQuery中的
return false
将同时执行
e.preventDefault
e.stopPropagation
,其中第二个将防止事件冒泡,这就是您所追求的

其他信息:

如果要随时绑定和解除绑定事件,请将代码存储在函数中,然后可以使用命名空间事件将事件与该函数关联

function dlog(e) {
  e.preventDefault();
  dialog(this);
}

var $els = $("#loginLink, #registerLink");

$els.on('click.dlog', function(e){ dlog(e) }); // bind
$els.off('.dlog'); // unbind
编辑: 另一个选项是使用只附加一次事件的
one()
,然后在对话框关闭时可以再次附加事件

$els
  .one(function(e) { dlog(e) })
  .dialog({
     beforeClose: function() { 
       $els.one(function(e) { dlog(e) });
     }
  });

@clclanrs-您的语法是否正确。对不起,我以前没见过这样的场面。我不确定我是否理解您为绑定和取消绑定设置的函数参数。“click.dlog”和“.dlog”是什么意思?这些是命名空间事件。你可以读更多
dlog
是“dialog”的缩写,你可以使用任何你想要的名称空间。你能举个例子吗。抱歉,我仍然无法理解$els.on(和$els.off)之后的函数参数是什么意思(但我理解dlog函数是如何工作的。你能像其他建议一样提出它吗?谢谢。抱歉,我问了很多问题。很抱歉,我仍然不理解$els.on(和$els.off)之后的函数参数(click.dlog和.dlog是什么意思?我知道你的代码非常简洁,但你能不能让它更详细一些,这样我就可以理解了。你提到了$.els.dialog,但我的应用程序中没有。dialog是我用来打开模式窗口进行登录的函数。没有beforeClose设置。我还需要设置其中一个吗?我想如果OP使用on/off(需要jQuery 1.7或更高版本),请阅读jQuery文档中关于
on()
的名称空间事件的语法,bind/unbind或delegate/unelegate并不重要。OP不必使用on/off,但只要事件解除绑定或阻止传播,任何off方法都可以。
function dlog(e) {
  e.preventDefault();
  dialog(this);
}

var $els = $("#loginLink, #registerLink");

$els.on('click.dlog', function(e){ dlog(e) }); // bind
$els.off('.dlog'); // unbind
$els
  .one(function(e) { dlog(e) })
  .dialog({
     beforeClose: function() { 
       $els.one(function(e) { dlog(e) });
     }
  });