49

onclickアンカーの属性の値を変更したいと思います。JavaScript を含む新しい文字列に設定したいと考えています。(その文字列は、サーバーによってクライアント側の JavaScript コードに提供され、HTML の属性に入れることができるものは何でも含めることができonclickます。) ここで、私が試したいくつかのことを示します。

  • jQuery の使用attr("onclick", js)は、Firefox と IE6/7 の両方では機能しません。
  • 使用setAttribute("onclick", js)は Firefox と IE8 で動作しますが、IE6/7 では動作しません。
  • に渡されたコードonclick = function() { return eval(js); }の使用が許可されていないため、使用は機能しません。returneval()

onclick 属性を に設定して、これを Firefox および IE 6/7/8 で機能させるための提案はありますか? これをテストするために使用したコードの下も参照してください。

<html>
    <head>
        <script type="text/javascript"
                src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var js = "alert('B'); return false;";
                // Set with JQuery: doesn't work
                $("a").attr("onclick", js);
                // Set with setAttribute(): at least works with Firefox
                //document.getElementById("anchor").setAttribute("onclick", js);
            });
        </script>
    </head>
    <body>
        <a href="http://www.google.com/" id="anchor" onclick="alert('A'); return false;">Click</a>
    </body>
</html>
4

7 に答える 7

74

onClickjQueryを使用している場合は、これ以上使用しないでください。jQueryは、イベントをアタッチおよびバインドする独自のメソッドを提供します。見る.click()

$(document).ready(function(){
    var js = "alert('B:' + this.id); return false;";
    // create a function from the "js" string
    var newclick = new Function(js);

    // clears onclick then sets click using jQuery
    $("#anchor").attr('onclick', '').click(newclick);
});

これで関数がキャンセルonClickされ、「文字列からのJavaScript」も保持されます。

onclick=""最善の方法は、HTMLコードの要素からを削除し、イベントをクリックにバインドする目立たない<a>方法を使用するように切り替えることです。

あなたも言った:

onclick = function() { return eval(js); }eval()に渡されたコードでreturnを使用することは許可されていないため、使用は機能しません。

いいえ-しませんがonclick = eval("(function(){"+js+"})");、'js'変数を関数エンクロージャーにラップします。 onclick = new Function(js);同様に機能し、読むのが少しきれいです。(大文字のFに注意してください)-コンストラクターに関するドキュメントを参照してくださいFunction()

于 2009-05-05T20:07:24.340 に答える
0

jQueryバインドメソッド!jquery-selector!.bind('event'、!fn!);を使用するだけです。

jQueryのイベントの詳細については、こちらをご覧ください

于 2009-05-05T20:12:45.670 に答える
0

実際に新しいページに移動したくない場合は、このようにページのどこかにアンカーを配置することもできます。

<a id="the_anchor" href="">

次に、JavaScript の文字列をアンカーの onclick に割り当てるには、これを別の場所 (ヘッダー、本文の後半など) に配置します。

<script>
    var js = "alert('I am your string of JavaScript');"; // js is your string of script
    document.getElementById('the_anchor').href = 'javascript:' + js;
</script>

ページを送信する前にサーバーにこのすべての情報がある場合は、次のように JavaScript をhrefアンカーの属性に直接配置することもできます。

<a href="javascript:alert('I am your script.'); alert('So am I.');">Click me</a>
于 2009-11-02T13:41:20.600 に答える
0

Jquery の落とし穴の 1 つは、クリック関数が html から手動でコーディングされた onclick を認識しないことです。

だから、あなたはほとんど選択する必要があります。すべてのハンドラを init 関数で設定するか、すべてを html で設定します。

JQuery のクリック イベントは、クリック関数 $("myelt").click (関数 ....) です。

于 2009-05-05T19:56:31.233 に答える
-3

これに対する迅速で汚い修正を思いついた。使用したばかり<select onchange='this.options[this.selectedIndex].onclick();> <option onclick='alert("hello world")' ></option> </select>

お役に立てれば

于 2009-11-02T13:14:00.400 に答える