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 関数を無効にします。次に、「無効」属性を削除し、要素のクリック関数を再度呼び出します。現在、要素には「無効」属性がないため、デフォルトの機能のみが実行されます。私はまだこの問題に対する「よりエレガントな」解決策を受け入れていますが、今のところ私は幸せなキャンピングカーです!