0

我有以下 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 时,我想禁用链接并调用对话脚本。我创建了以下函数:

$("#loginLink, #registerLink")
    .click(function () {
        $('#loginLink').prop('disabled', true);
        $('#registerLink').prop('disabled', true);
        dialog(this);
    });

它正确调用对话框,但不会禁用链接,如果我多次单击按钮,它会调用多个对话框。有什么我做错了吗?我不明白为什么它不起作用。

4

4 回答 4

1

您必须使用 jQueryon()off()方法来绑定/取消绑定事件。设置disabled属性对链接没有影响,点击事件仍然会被触发。

在这里你可以找到描述和演示: http ://api.jquery.com/off/

于 2012-09-09T09:00:14.423 回答
1

如果您想随时绑定和取消绑定事件,请将代码存储在函数中,然后您可以使用命名空间事件将事件与该函数相关联。

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) });
     }
  });
于 2012-09-09T09:13:24.290 回答
0

你需要这样做

$("#loginLink, #registerLink").click(function(e) {
    e.preventDefault();
    dialog(this);
});
于 2012-09-09T08:59:48.840 回答
0
$("#loginLink, #registerLink").on("click", function () {
 dialog(this);
 return false;
});

return false在 jQuery 中将执行两者,e.preventDefaulte.stopPropagation第二个将阻止事件冒泡,这就是你所追求的。

附加信息: event.preventDefault() 与 return false

于 2012-09-09T09:06:33.450 回答