0

次のようなアンカーに onclick 属性を設定しようとしています。

$("a").click(function(e) {
    $(this).onclick = "ItWorks";
    output = "JS onclick attempt: my onclick is: <strong>" + $(this).onclick + "</strong>";
    $(this).prop("onclick", "ItWorks");
    output += "<br />jQuery prop() attempt: my onclick is: <strong>" + $(this).prop("onclick") + "</strong>";
    $(this).attr("onclick", "ItWorks");
    output += "<br />jQuery attr() attempt: my onclick is: <strong>" + $(this).attr("onclick") + "</strong>";

    alert(output);
    e.preventDefault();
}); 

純粋な JS、jQuery の prop() および attr() 関数を試しました。このでわかるように、 .attr() 関数のみが正常に機能します。

他の2つの試行が「null」または「未定義」を返すという私が間違っていることを誰かに教えてもらえますか?

4

2 に答える 2

1

$(this).onclick = "ItWorks";

DOM ノードではなく、JQuery オブジェクトにプロパティを設定します。

$(this).prop("onclick", "ItWorks");

プロパティを文字列に設定しますが、関数が必要です...そして、プロパティは、他のいくつかのプロパティのように属性値に直接マップされません.

$(this).attr("onclick", "ItWorks");

属性を文字列に設定しますが、JS として実行されたときに何かを行うものではありません。

イベント ハンドラーを設定する必要があり、jQuery を使用している場合は、onメソッドを使用し、属性値を調べてテストしようとしないでください。

于 2013-10-21T13:02:00.777 に答える
1

簡単にしない理由:

<a href="javascript:void(0)" onclick='clickEvent("a")'>link</a>
<a href="javascript:void(0)" onclick='clickEvent("a")'>link</a>

function clickEvent(event)  {
   if (event == "a") {
     output = "event a clicked";
   } elseif (event == "b") {
     output = "event b clicked";
   }
   alert(output);

}
于 2013-10-21T12:58:34.463 に答える