1

Main.php というメイン ページがあります。このページには、クリックすると div の innerHTML (既に Main.php にあり、divResults と呼ばれる) を Results.php からの結果で設定するボタンがあります。

Results.php が呼び出されると、返された HTML "These Are The Results" が適切に受信され、コンテンツとして Main.php の divResults に設定されます。ただし、Results.php の JavaScript は実行されません。例として、単純な window.alert を実行してみます。コード例は次のとおりです。

アクションを開始するための Main.php リンク ボタン:

<img src="$MyImageSource" onclick=\"ExpandDropdownDiv()\" />

Main.php JavaScript 関数 ExpandDropdownDiv():

function ExpandDropdownDiv(){

    if (window.XMLHttpRequest)/* code for IE7+, Firefox, Chrome, Opera, Safari */
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {/* code for IE6, IE5 */
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4)/* && xmlhttp.status==200) */
        {
            document.getElementById("divResults").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","Results.php",true);
    xmlhttp.send();

}

Results.php コード例:

<script type="text/javascript">
    alert("Success");
</script>
These Are The Results

------------------ 編集 - 更新 ------------------

Results.php からの単純なアラートは単なる例です。これを機能させることができれば、残りの問題は自分で解決できると思います。ただし、div の innerHTML を設定した後、Main.php の javascript にアラートを配置することを提案するコメントがいくつかあることに気付きました。では、div が設定された後、JavaScript で本当にやりたいことを説明しましょう。

画像 1は、jquery と dropdown-check-list 拡張子 (.js) を使用して変換された、いくつかの通常の「選択」html 要素を示しています。ユーザーが下部のカラフルな下向き矢印をクリックすると、div が展開され(画像 2)、この別の .php ファイル内にさらに 2 つの "Select" 要素が生成されます... html が返され、div に配置されます。したがって、ページ全体をリロードする必要はなく、新しい選択ドロップダウンを既存のもののすぐ下に配置できます。

問題は、これらの通常の選択要素を「変換」するために、その HTML に対して実行する必要がある JavaScript がいくつかあることです。

$(document).ready(function() {
     $(".MultiSelect").dropdownchecklist(  {firstItemChecksAll: true, maxDropHeight: 300 , searchTextbox: true, width: 100, textFormatFunction: function(options) {
        var selectedOptions = options.filter(":selected");
        var countOfSelected = selectedOptions.size();
        var size = options.size();
        switch(countOfSelected) {
        case 0: return "All";
        case 1: return selectedOptions.text();
/*      case size: return "All"; */
        default: return countOfSelected + " selected";
        }
    } 
    }
    ); 
}

したがって、どういうわけか、この他の .php ファイルから生成された HTML に対して JavaScript を実行できるようにする必要があります。上記のコードを呼び出すだけで、divs innerHTML が満たされた後、2 つの新しいドロップダウンではなく、既存のドロップダウンのみが再生成されます。

サンプル画像

ここに画像の説明を入力

ここに画像の説明を入力

4

3 に答える 3

6

あなたが何をしているのかを理解するための良い読み物は次のとおりです: Eval embedded JavaScript Ajax: YUI style

eval(); を使用してコードを機能させる しかし、さまざまな理由からお勧めしません。

php を取得して、次のように変更しましょう。

<script type="text/javascript">
    function result() {
        alert("Success");
    }
</script>
These Are The Results

これは AJAX からのコールバック関数です。結果(); 評価されないため実行されず、存在しません。あなたの場合はどれですか

if (xmlhttp.readyState==4)/* && xmlhttp.status==200) */
        {
            document.getElementById("divResults").innerHTML=xmlhttp.responseText;
            result(); // this function is embedded in the responseText
                      // and doesn't get evaluated. I.e. it doesn't exist
}

ブラウザが を認識できるようにするには、div に挿入したスクリプト タグ内のすべての JavaScript ステートメントに対して次の操作result();を行う必要があります。eval();id divResults

if (xmlhttp.readyState==4)/* && xmlhttp.status==200) */
        {
            document.getElementById("divResults").innerHTML=xmlhttp.responseText;
            var myDiv = document.getElementById("divResults");
            var myscripz = myDiv.getElementsByTagName('script');
            for(var i=myscripz.length; i--;){
                   eval(myscripz[i].innerHTML);
            }
            result(); //alerts success
}

簡単な方法:

私が行う最も簡単な方法は、基本的に JavaScript を php から削除してコンテンツを表示することです。コールバックの後、コールバック関数 php 内で残りの JavaScript を実行します。

 echo 'These Are The Results';

JavaScript:

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4)/* && xmlhttp.status==200) */
    {
        document.getElementById("divResults").innerHTML=xmlhttp.responseText;
        alert('success'); // or whatever else JavaScript you need to do
    }
}
于 2011-02-11T16:29:17.973 に答える
0

Result.phpのjavascriptコードを関数でラップし、次のように挿入してから呼び出してみてください。

<script type="text/javascript">
    function result() {
        alert("Success");
    }
</script>
These Are The Results

   if (xmlhttp.readyState==4)/* && xmlhttp.status==200) */
    {
        document.getElementById("divResults").innerHTML=xmlhttp.responseText;
        if(result) result();
    }
于 2011-02-11T16:09:51.967 に答える
0

results.php は次のようにする必要があります...

echo 'eval("function results() { alert(\'success\'); }");';

そして、結果関数を呼び出します。

于 2011-02-11T16:31:46.603 に答える