1

ajax 経由で読み込まれるダイアログがあります。その ajax のペイロードには、html と javascript の両方が含まれています。

ダイアログは正常に表示され、そのペイロードに含まれる JS が実行されます。

ただし、ペイロード内の JS から (ID、クラス、または要素タイプによる) 要素を選択できません。

ペイロードに次のものがあったとしましょう:

<div>
   <ul id="testid">
     <li>A</li>
     <li>B</li>
   </ul>
</div>
<script type="text/javascript">
    $(document).ready(function() {
        console.info('test: ' + $("#testid").length);
    });
</script>

これにより、test: 0 がコンソールに表示されます。

「本体」を選択するようにセレクターを変更すると、ゼロ以外の値になります。

ロードされたコンテンツが表示され、そこに含まれる JS が実行されていることは明らかです。私の理解では、.ready() 呼び出しにより、HTML ペイロードを含めるように DOM 時間を更新できるようにする必要があります。

残念ながら、この例では、ダイアログ機能を実行するフレームワーク (zotonic) を使用しているため、ajax ロード自体を直接制御することはできません。

奇妙なことは、私が持っている他の ajax ロードされたページで、ajax ロードされたペイロードの要素を選択する JS が機能していることです。(これまでのところ) 失敗しているように見えるダイアログのものだけです。

なぜこれがうまくいかないのか、私は少し途方に暮れています。私はデューデリジェンスを行い、過去数日間グーグルなどを検索しましたが、解決策がなかったので、ここで助けを求めて叫びたいと思いました.

ジェイソン

4

1 に答える 1

0

readyページが初めて読み込まれたときにのみ機能すると思います。AJAX 呼び出しの結果に依存している場合は、操作が非同期であるため、コールバックを使用する必要があります。zotonic は、使用できるフックを提供していますか? それ以外の場合は、少し難しくなります。おそらく、ページの読み込み時に、次のように DOM をポーリングできます。

<script type="text/javascript">
    $(document).ready(function() {
        var interval = setInterval(function() {           
            if($("#testid").length > 0) {
               clearInterval(interval);
               console.info('test: ' + $("#testid").length);
            }
        }, 750);
    });
</script>

これにより、 の 750 ミリ秒ごとにページングがクエリされます#testid。要素が見つかった場合、間隔はキャンセルされ、コンソール出力が表示されます。

于 2010-12-05T21:12:16.253 に答える