0

Web ページ内のすべてのアンカーのクリック イベントのデフォルト アクションを置き換えたいと考えています。このコードを使用すると:

<html> <head> <script>     
var list=document.getElementsByTagName("a");
var isChecked = false;

function load () {    
    for (i=0; i<list.length; i++)
    {
        var old = (list[i].onclick) ? list[i].onclick : function () {}; 
        list[i].onclick = function () {                 
        if( !isChecked)
        {
            test(); 
            old();
        }
        else
            old();
        };  
    }
}    
function test() {
    alert("new action");
    isChecked = true;
}     
</script> </head> 
<body onload="load();">     
<a id="nr_1" onClick="alert('test');"> Anchor 1 </A>
<a id="nr_2" onClick="alert('test2');"> Anchor 2 </A>      
</body> </html>

アンカーをクリックすると、テスト関数からアラートが出て、次に 2 番目のアンカーのデフォルト関数からアラートが出ます (最初のアンカーをクリックしても)。2 つのアンカーのいずれかをもう一度クリックすると、常に 2 番目のアンカーからアラートが表示されます。アンカー要素ごとに元の onclick 関数を元に戻すにはどうすればよいですか? 誰かがjqueryで解決策を持っているとき、私もうれしいです。

編集

私はこのコードを使用して成功しました:

function load()
{
$('a').attr('disabled', 'disabled');

$('a').click(function(e){
    if($(this).attr('disabled'))
    {
    alert("new");
    e.preventDefault(); 
    $('a').removeAttr("disabled");  
    this.click();
    }
});
}

ページの読み込み時に、この関数が呼び出され、すべてのアンカー要素に「無効」属性が与えられます。要素をクリックした後、e.preventDefault() 関数はインラインの onclick 関数を無効にします。次に、「無効」属性を削除し、要素のクリック関数を再度呼び出します。現在、要素には「無効」属性がないため、デフォルトの機能のみが実行されます。私はまだこの問題に対する「よりエレガントな」解決策を受け入れていますが、今のところ私は幸せなキャンピングカーです!

4

1 に答える 1

2

jQueryを使用する場合は、1回限りのハンドラーと永続的なハンドラーを組み合わせることができます。

.one()および.on( )のドキュメント

実例:http://jsfiddle.net/Q8gmN/

サンプルHTML:

<input type="button" id="click" value="click" />

サンプルJavaScript:

button.one('click', function () {
  console.log('one time function fired');  
});

button.on('click', function () {
  console.log('persistent function fired');  
});

</ p>

于 2012-07-18T13:20:12.833 に答える