0

AJAX呼び出しを介して実行されるjavascriptファイルに関する私の問題は

例えば ​​:

index.php

$(function(){
$(".btn-ajax").click(function(){
$.getJSON('ajax.php',function(data){

jsInc(data['js'][0]['src']);

$("#response").html(data['html']);

});
});

function jsInc($src){
 var head = document.getElementsByTagName("head")[0];
            var script=document.createElement("script");
            script.type='text/javascript';
            script.src = $src;
            head.appendChild(script);
}   

ajax.php

$arr['js'][] = array('src'=>'js.js');
$arr['html'] = '<input type="button" class="btn" value="show message"/>';

echo json_encode($arr);

js.js

$(function(){

$(".btn").on('click',function(){
    alert("test !");
    });

});

しかし、ajaxリクエストを実行し、入力ボタンをindex.phpファイルに追加すると、このボタンクリックイベントが機能しません!

私を助けてください

ありがとう

4

4 に答える 4

0

Ajax 呼び出しの後にクリック関数を再バインドしてみてください (成功):

$.ajax({... 
       success: function(data) {
           $(".btn").click(clickFunction);
           } 
});


$(".btn").on('click', clickFunction);

function clickFunction() {
    alert("test !");
}
于 2012-11-14T14:19:53.560 に答える
0

AJAX 経由でスクリプトを取得したいですか? 使用できます$.getScript

$.getScript("script.js");

GET HTTP リクエストを使用してサーバーから JavaScript ファイルをロードし、それを実行します。

于 2012-11-14T14:05:50.373 に答える
0

クリックリスナーをバインドするJSを最初にロードしてから、ボタンをロードしていると思います。SOリスナーはバインドされません

次のように順序を逆にしてみてください。

$("#response").html(data['html']);
jsInc(data['js'][0]['src']);
于 2012-11-14T14:13:30.320 に答える
0

js.js の関数をデリゲート関数に変更する必要があります。

$(function(){

$('body').on('click','.btn',function(){
    alert("test !");
    });

});

こうすると。.btn 要素は、スクリプトが実行される前に存在する必要さえありません。.btn 要素が存在するかどうかを確認する前に、イベントを body タグに添付します。

于 2012-11-14T14:29:59.303 に答える