1

この質問は主に好奇心からのものです(私はこの問題に対して別の実用的な解決策を持っています)。基本的なプログレッシブエンハンスメントを実行しようとしています。JavaScriptを使用して別のページに移動するには、テーブルの各行をクリック可能にする必要があります。JavaScriptを使用していない人のために、各行の最初の列にリンクがあります。JavaScriptが有効になっている場合は、リンクを無効にする必要があります。そうするための多くの簡単な方法の1つは

a.setAttribute("onclick", "return false;");

行のクリックイベントを初期化した後。しかし、同じことを達成するためにaddEventListenerを使用する方がよりエレガントに見えます

a.addEventListener("click", function() { return false; }, false);

ただし、後者は機能しません。この理由は、この方法で複数のイベントリスナーを追加でき、それらが異なる真理値を返す場合、結果があいまいになるためだと思います。この仮定は正しいですか、それとも私は何か間違っていますか?この背後にある内部の仕組みを説明してください。

4

2 に答える 2

2
a.addEventListener("click", function(event) { event.preventDefault(); return false; }, false);

これはあなたのニーズに合うはずです。

于 2009-09-09T21:43:38.927 に答える
1

a.setAttribute( "onclick"、 "return false;");

setAttributeは避けてください。HTMLドキュメントを処理するためにsetAttributeが必要になることはなく、ブラウザーに問題があります(特に、IE、特にイベントハンドラーの場合)。代わりに、直接DOMHTMLプロパティを使用してください。

a.onclick= function() {
    return false;
};

fphilipeによって提案されているようにpreventDefault()を使用する場合は、addEventListenerで問題ありませんが、DOMイベントがサポートされていないIEのattachEventバックアップが必要になります。これは、リンクを無効にしようとするだけではやり過ぎかもしれません。

個人的にリンクを無効にするには、リンクを完全に削除して、新しいウィンドウで開くやブックマークリンクなどの操作に使用できなくなり、キーボードのタブ順序に参加しないようにします。

したがって、それをremoveChild()するか、同じテキストのスパンに置換するか、リンクからテキストを削除することができます。

while (a.firstChild)
    a.parentNode.insertBefore(a.firstChild, a);
a.parentNode.removeChild(a);
于 2009-09-10T00:56:46.807 に答える