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 falsejQueryでは両方が実行されe.preventDefaulte.stopPropagation2番目のイベントはイベントが発生するのを防ぎます。それがあなたの目的です。

追加情報: event.preventDefault() と return false

于 2012-09-09T09:06:33.450 に答える