簡體   English   中英

來自加載了AJAX的頁面的jQuery自定義事件僅被調用一次

[英]Jquery Custom event from page loaded with AJAX called only once

我遇到了問題。 有一個帶有腳本的頁面可加載子頁面並記錄在Subform中觸發的自定義事件。

---- Default.aspx ----

<body>
<input type="button" class="clickable" value="Load child doc" />
<hr />
<div id="container"></div>
</body>

<script>
var clickHandler = function () {
    $.ajax("Subform.aspx", {
        method: "GET",
        success: function (data) {
            $('#container').html(data);
        }
    });
}

$(function () {
    $('body').on('click', clickHandler);

    $('body').on("dataLoaded", function (param) {
        console.info("Custom event triggered", param);
    })
});

---- Subform.aspx具有觸發自定義事件“ dataLoaded”的腳本----

<html>
<header>
    <script src="scripts/jquery-1.7.1.js"></script> 
</header>
<body>
..context of Subform...
<script>
        $(function () {
            $('body').trigger("dataLoaded", { key: "value from sub form" });
            console.log("ChildPage loaded. dataLoaded event triggered")
        })
    </script>
 .....
 </body>
 </html>

問題是子窗體加載到容器中之后(並且文檔准備好在ajax加載的文件中觸發-我看到消息:“ childPage loading ..”),觸發了自定義事件“ dataLoaded”,但處理程序僅調用了一次-首次ajax加載childPage。 所有其他ajax調用均會加載子表單的上下文,記錄文本“ ChildPage已加載。觸發了dataLoaded事件”,觸發了事件“ dataLoaded”,但不再調用自定義事件的事件處理程序。 我希望每次加載子頁面並觸發自定義事件時,都會調用該事件的處理程序。

找到問題/解決方案。 Subform.aspx是一個HTML頁,在標頭中帶有JQuery腳本參考標記。 當子表單加載到父#container div中時,子表單重新加載了jQuery,並且處理程序丟失了。

解決方案很容易-在subform.aspx中刪除<script>標記和所有其他可能使主文檔無效的標記,例如正文,html,標頭。 只留下內容,像這樣

<div>
SubForm
    Ajax response....
<script>
    $(function() {
        debugger;
        $('#container').trigger("dataLoaded", { key: "value from sub form" });
        console.log("ChildPage loaded. dataLoaded event triggered");
    });
</script>

更改后,將處理在動態加載的頁面中觸發的自定義事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM