0

重複の可能性:
Ajax レスポンスから返された JavaScript 関数の呼び出し

var url = "showpdf.php";
$.ajax({
    type: "post",
    url: url,
    data:    {academic:academic,uni:uni,course:course,lan:lan,sem:sem,subject:subject,type:type,clz:clz},
    success: function(response)
    {
        alert(response);
        document.getElementById("alldata").innerHTML = response;

    }
});

応答内に、単純な JavaScript 関数を使用した以下の html コードがあります

<label onclick="popup()"> clickme </label>
<script>
function popup()
{
  alert("hello");
}
</script>

ここで、この popup() 関数が機能していません。助けてください。

4

2 に答える 2

3

問題は、ajax 応答に含まれる Javascript が実行されることを期待していることです。これは当てはまりません。ブラウザーは、ajax 応答に含まれる Javascript を実行しません。Javascript を解析して何らかの方法で実行することは可能かもしれませんが、eval()それは厄介であり、良い考えではありません。また、有効なJavascriptのみを受け入れることをeval()考慮する必要があるため、HTMLが含まれているため、応答を渡すことはできません。

考えられる解決策は、popup()関数をページまたは外部 Javascript ファイルで既に定義し、HTML を DOM に追加した後にクリック ハンドラーを割り当てることです。

例えば:

function popup()
{
    alert(this.id);
}


document.getElementById("alldata").innerHTML = response;
document.getElementById("myNewLabel").onclick = popup;
于 2012-12-06T11:42:58.477 に答える
0

その文字列をページで非表示にし、成功時に表示するだけです。お気に入り:

<label onclick="popup()" id="mylable" style="display:none"> clickme </label>
<script>
function popup()
{
  alert("hello");
}
</script>


var url = "showpdf.php";
$.ajax({
    type: "post",
    url: url,
    data:    {academic:academic,uni:uni,course:course,lan:lan,sem:sem,subject:subject,type:type,clz:clz},
    success: function(response)
    {
       // alert(response);
        $("#mylable").show();

    }
});

DOM を試すより良い方法。上記のコードがうまくいくかどうか教えてください。

于 2012-12-06T11:49:13.540 に答える