2011-04-29 89 views
1

有一個div經常由ajax改變它的innerHTML。一旦頁面加載,jQuery function()可以工作,但是當innerHTML由ajax改變時,某些功能不起作用。我使用螢火蟲檢查了代碼並嘗試簡單地解釋它。**jQuery fn()沒有加載/運行?

我認爲DOM只會在第一次加載頁面時加載js文件,並且如果ajax修改了innerHTML,那麼函數不會以某種方式調用。您說什麼?根據你的解決方案是什麼? HTML頁面

<body> 
    <div class="_div_change"> dynamically class add by jQuery function() 

     here contenet is added by ajax functionality 
    </div> 

    <script type="text/javascript"> 
      $(function(){ 
      $('._div_change').addClass('.div_class'); 
       }); 
    </script> 
    </body> 

Loading first time & class is added by fn() |only div innerHTML modified by ajax *** 
              | 
    <div class="_div_change div_class">  | <div class="_div_change"> 
     innerHTML elements added successfully| innerHTML elements altered successfully 
    </div>         | </div>  

回答

1

你的腳本是不完整的,但假設它看起來像這樣:

$(function(){ 
     $('._div_change').addClass('.div_class'); 
}); 

...你在做什麼,然後有告訴jQuery來運行功能一旦當DOM最初加載(調用$()具有功能是快捷方式jQuery.ready)。如果你想重新運行,當你更新通過AJAX div的內容是工作,你必須做的是,在對Ajax調用你的success處理程序。

你可以給jQuery的一個功能,只要任何Ajax調用完成後,它會調用,通過jQuery.ajaxSuccess,這可能是有用的。

+0

感謝TJ描述邏輯。編輯腳本。 – Bibhaw 2011-04-29 08:42:46

1

是的,代碼只在頁面加載時運行一次。

$(function(){...});是連接文檔的準備事件的簡短形式:$(document).ready(function(){...});

如果你改變了DOM,並希望jQuery代碼應用到新的元素,你應該重新運行的範圍父元素的代碼。創建具有代碼的功能和範圍參數:

function updateElements(scope) { 
    $('._div_change', scope).addClass('.div_class'); 
} 

現在,您可以與文檔範圍運行從就緒事件功能:

$(function(){ 
    updateElements(document); 
}); 

當您加載新的內容爲元素,可以說,一個與id="asdf",你可以用元素範圍重新運行該功能,它將應用更改只對新添加的內容:

updateElements($('#asdf')); 
+0

哦,我明白了。非常感謝你說清楚。讚賞! – Bibhaw 2011-04-29 08:39:56

+0

你搖滾的人:)。它現在正在工作。我從最近兩天就被卡住了:P。非常感謝 – Bibhaw 2011-04-29 08:48:37