1

私が書いた jQuery エラー処理コードに問題があります。問題は、PHP が echo ステートメントを使用して jQuery コードをページに挿入するように jQuery コードを作成すると、コードが正常に機能することです。ただし、php ステートメントの終了後に jQuery コードを入力して、通常の html のように含めると、機能しません。jQueryが実際にブラウザーに戻ったときに要素がDOMで使用できないという何らかの問題があると思われますが、これがどのように当てはまるかはわかりません。

コードに関しては、ここに例があります。

これは、インクルード ファイルの php の終了 ?> タグの後にインクルードする場合のコードの記述方法です。

<script>

    $("#adminuserlist select[name=userlist]").change(function(){ 
            if($("#adminuserlist select[name=userlist]").val() == \'\'){
                $("#noadminuser").css("visibility", "visible"); 
                $("#noadminuser").dialog({ 
                    modal:true, 
                    show: { 
                        effect: "fade", 
                        duration: 300 
                    }, 
                    hide: { 
                        effect: "fade", 
                        duration: 300 
                    } 
                }); 
            } 
            else{ 
                $("#adminuserlist").submit(); 
            }
        }
    );

</script>

これは、PHP でコードを挿入したときのコードの外観です。このようにすればうまくいきますが、私の考えでは、組織の悪夢のようなものです。

<?php echo '<script>';

    echo '$("#adminuserlist select[name=userlist]").change(function(){ if($("#adminuserlist select[name=userlist]").val() == \'\'){ $("#noadminuser").css("visibility", "visible"); $("#noadminuser").dialog({ modal:true, show: { effect: "fade", duration: 300 }, hide: { effect: "fade", duration: 300 } }); } else{ $("#adminuserlist").submit(); }});';

echo '</script>'; ?>

これらの両方の構成からブラウザーで検索先を調べると、間隔を超えて同じように見えます。これが、jQuery がロードされたときに DOM に存在しない要素に関する何らかの問題である場合、それを修正する方法を聞きたいです。on を使用してデリゲート バインディング メソッドを試しました。コードを $(document).ready ステートメントや他の多くの方法でカプセル化しようとしましたが、PHP を使用して jQuery コードを挿入しないと、すべての努力が無視されるようです。

私を最も困惑させているのは、jQuery コードが PHP コードの後に​​ストレート HTML として含まれている場合に完全に機能する .change メソッドの代わりに .click メソッドを使用する同様のページがあることです。私は困惑しているので、どんな入力も素晴らしいでしょう。

前もって感謝します。

4

2 に答える 2

2

ページを初期化するときはいつでも、document.ready ブロックで行う必要があります。

<script>
$(document).ready(function() {
    // Your initialisation code here, including setting up event handlers
});
</script>

これにより、初期化コードを実行する前に、ドキュメントが「準備完了」、つまりダウンロードする HTML がなくなり、すべての要素が DOM に存在することが保証されます。

于 2013-05-24T04:24:16.220 に答える
0

あなたのコードは問題ないようです。それはうまくいくはずです。問題は、エスケープされた単一引用符の if 条件にある可能性があります。ここではそのスラッシュは必要ありません。php を介して注入する場合と同様に、そのエスケープは通常のエスケープに変換され、そこでも必要になります。

あなたの条件を

if($("#adminuserlist select[name=userlist]").val() == ''){

また、準備が整ったドキュメント内にコードをラップします。ページの最後に含める場合は必要ありませんが。ただし、すべてのコンテンツが確実にロードされるようにするには、ラップしてください。

于 2013-05-24T04:35:17.673 に答える