2014-07-04 64 views
1

所以,我有一個div(id =「content」),我正在加載我從AJAX請求獲得的各種其他HTML。我希望能夠告訴他們何時成功加載,但加載事件似乎不適用於append()。使用jQuery捕獲元素「加載」事件append() - ed元素?

我有這個簡單的例子來說明情況(在現實情況下,對「負載」事件監聽器被註冊,其中得到腳本的部分加載不同的文件)

<html> 
<head> 
    <script 
     type="text/javascript" 
     src="http://code.jquery.com/jquery-latest.min.js"> 
    </script> 
</head> 

<body> 
    <div id="content"><div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      // this does not seem to work 
      $("#myDiv").on('load', function() { 
       console.log("myDiv loaded"); 
      }); 

      // neither does this 
      $("#content").on('load', "#myDiv", function() { 
       console.log("myDiv loaded by delegation"); 
      }); 

      // the content to append will come from the network 
      $("#content").append($("<div id='myDiv'>myDiv</div>")); 
     }); 
    </script> 
</body> 
</html> 

中當然,在現實情況下,事情比較複雜(加載的數據可以是任何東西),所以這些都不是有效的選項:

  • 具有調用的函數在div加載
  • 具有如下功能後嵌入在T他加載代碼(代碼是從模板文件生成的)
+0

div沒有'onload'事件附加,因此它不會被解僱。 – Satpal

+0

嘗試看看這些:[追加後的jQuery回調](http://stackoverflow.com/questions/7865657/jquery-callback-after-append),[如何模擬追加回調函數?](http:// stackoverflow .com/questions/8406705/how-to-simulate-an-append-callback-function),[.append之後的jQuery函數](http://stackoverflow.com/questions/6068955/jquery-function-after-append) 。 – Joe

回答

1

如果您從Ajax請求獲取數據,則應該使用Ajax done()函數。由於該調用是異步的,因此您無法聽取div中的更改。另一種解決方案是在div上添加一個body委託並使其監聽change事件。

$("body").delegate("mydividentifier", "change", function(f){}); 
$.ajax().done(function(f){}); 
+0

這實際上啓發了我在ajax done()回調中觸發一個自定義事件,並監聽它而不是「加載」事件。這似乎工作,謝謝! –

+0

你可以投票的答案,並標記爲正確的,如果你願意:) –

+0

我不能upvote它不幸的是,需要建立更多的聲譽:( –