2017-02-23 14 views
1

htmlのaタグのhref属性に可能な場所のjqueryコードがあることがわかりました。href属性のjQueryコードの奇妙な振る舞い

しかし、そのコードは理解できないので、2回目のクリック後に動作します。 なぜですか?この行動の奇妙な

<a href="javascript:alert('ok JavaScript')">JS</a> 
 
<br> 
 
<script src="https://code.jquery.com/jquery-latest.min.js"></script> 
 
<a id="myId" href='javascript: 
 
    $(document).ready(function(){ 
 
    $("#myId").click(function() { 
 
     alert("ok jQuery"); 
 
    }); 
 
    });'>jQ</a>

+3

JSコードを 'href'に追加することは可能ですが、実際には本当に* –

+0

@Roryではありません。私はブックマークレットが必要です。 –

+0

DOM jsコードを実行する準備ができました。あなたのコードでは、あなたはJavaScriptを手動でクリックして実行していますので、まず、ドキュメント準備関数を呼び出してmyId click関数呼び出しを待ちます。 –

答えて

1

何もありません。
最初にリンクにバインドされたjQuery clickハンドラはありません。

$(document).ready(function() { 
    $("#myId").click(function() { 
    alert("ok jQuery"); 
    }); 
}); 

をし、あなたのリンクにハンドラをバインドします

はしかし、あなたが初めてで、それをクリックしたとき、それはそのhrefから次のスクリプトを実行します。 最初のクリック後にはalertはありませんが、今度は#myIdにバインドされたclickハンドラがあります。

2回目にクリックすると、新しくバインドされたjQueryイベントが発生し、警告が表示されます。
また、hrefを再度実行するので、このリンクを再度クリックすると、2つの(同じ)クリックハンドラと2つのアラートが発生し、毎回アラート数が増えます。

1

最初のクリックは、アラートボックスを表示するクリックイベントを定義します。

2回目のクリックでコードが実行され、警告ボックスが表示されます。

コメントは、このコードをhref属性に含めないでください。悪いことです。

2

最初のクリックで、href属性の関数が実行され、ハンドラは 'myId'アンカー要素にバインドされます。 2番目のクリックハンドラが実行され、アラートが表示されます。