3

在ASP.NET MVC中,在通過Ajax加載的局部視圖上運行Javascript的首選模式是什麼?如何處理ajax加載的部分視圖中的javascript?

例如,假設您需要在部分視圖中連接一些點擊事件。

當然,在局部視圖中放置類似的東西是行不通的,因爲文檔就緒事件在部分視圖加載Ajax後不會觸發。

<script type="text/javascript"> 
    $(function() { 
     $("a.foo").click(function() { 
      foo(); 
      return false; 
     }); 
    }); 
</script> 

我想這樣的東西可能會起作用,但它是否安全?

<script type="text/javascript"> 
    $("a.foo").click(function() { 
     foo(); 
     return false; 
    }); 
</script> 

我一直在使用一直到裝載部分之後,從我父視圖運行任何JavaScript,這樣的模式:

$.get(url, function(html) { 
    $("#partialDiv").html(html); 

    // Now that the partial has loaded... 
    RegisterClicks(); 
}); 

但我一直通過this例如工作,並注意到他們只是簡單地把他們的點擊註冊代碼內聯在局部視圖中。

這是一個通常安全的模式嗎?我如何確保在我的腳本運行之前,部分視圖的DOM已經完成加載?

+0

這是一個很好的問題的一部分。希望這篇文章會幫助http://stackoverflow.com/questions/3619484/can-i-add-javascript-dynamically-to-an-existing-script-element和這個http://www.hunlock.com/blogs/ Howto_Dynamically_Insert_Javascript_And_CSS – 2013-02-12 18:17:39

+1

要麼我做你的第二個例子,沒有問題,但我避免它,因爲如果部分重複然後JavaScript不必要地重複,也不會被縮小。相反,我把JavaScript放在一個外部的* .js文件中,並且父頁面必須包含它(並且因此如果父頁面通過捆綁/縮小框架包含它將被縮小)。我希望Partials具有某種OnLoadJavascript或支持的部分,但不幸的是他們沒有。 – AaronLS 2013-02-12 20:40:20

+0

我們確實需要這個:http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/2204831-be-able-to-use-cumulative-section-declaration – AaronLS 2013-02-12 20:41:46

回答

3

jQuery的.on()函數應該做的伎倆,不應該嗎?它應該適用於動態添加的內容。

有這可以作爲完整的內容

<script type="text/javascript"> 
    $(function() { 
     $("#partialContent").on("click", "a.foo", function() { 
      foo(); 
      return false; 
     }); 
    }); 
</script> 

<div id="partialContent"> 
    <a href="#" class="foo">Link 1</a> 
    <a href="#" class="foo">Link 2</a> 
    <!-- More dynamic content --> 
</div> 
+0

你確定JQuery.on()會使渲染的JavaScript可執行嗎? – 2013-02-12 19:37:49

+0

也許我誤解了這個問題?我以爲Eric在問如何將事件連接到動態元素上,這些動態元素是在DOM加載後添加的。 – Brett 2013-02-12 19:49:32

+0

可能。我雖然涉及將JavaScript添加到呈現的DOM,並確保它將被瀏覽器識別爲新代碼。 – 2013-02-12 19:52:15