7

次のコードを検討してください。

$("a").attr("disabled", "disabled");

IE と FF ではアンカーをクリックできなくなりますが、WebKit ベースのブラウザー (Google Chrome と Safari) では何もしません。disabled 属性の良いところは、簡単に削除でき、 href および onclick 属性に影響を与えないことです。

望ましい結果を得る方法について何か提案はありますか。答えは次のとおりです。

  • AJAX 呼び出しの実行中にフォーム入力コントロールを無効にしたいので、簡単に元に戻すことができます。
  • IE、FF、および WebKit で動作する必要があります
4

2 に答える 2

7

これらのアンカー要素に onclick イベント ハンドラがバインドされていると仮定します。イベントハンドラーに「無効」属性をチェックさせ、設定されている場合はイベントをキャンセルしてください。イベント ハンドラーは次のようになります。

$("a").click(function(event){
  if (this.disabled) {
    event.preventDefault();
  } else {
    // make your AJAX call or whatever else you want
  }
});

カーソルを変更するスタイルシート ルールを設定することもできます。

a[disabled=disabled] { cursor: wait; }

編集 - コメントで提案されているように、「無効」チェックを簡素化しました。

于 2008-10-06T17:05:29.583 に答える
2

他の条件などに応じてこの属性で有効/無効になっているアンカーがたくさんあるサイトでこの動作を修正する必要がありました。理想的ではないかもしれませんが、そのような状況で、各アンカーのコードを修正したくない場合個別に、これはすべてのアンカーに対してトリックを行います:

$('a').each(function () {
    $(this).click(function (e) {
        if ($(this).attr('disabled')) {
            e.preventDefault();
            e.stopImmediatePropagation();
        }
    });
    var events = $._data ? $._data(this, 'events') : $(this).data('events');
    events.click.splice(0, 0, events.click.pop());
});

と:

a[disabled] {
    color: gray;
    text-decoration: none;
}
于 2013-02-28T06:11:41.603 に答える