我正在開發一個使用Asp.net mvc和jquery的應用程序。我想爲不同視圖中的html元素使用相同的命名約定(類和ID)。
如果我想異步加載部分視圖,主視圖中代碼中的$(document).ready()代碼失去了效用,因爲沒有任何patial視圖的html標籤和css命名被jquery識別。我當然不想爲每個視圖編寫相同的代碼。什麼纔是解決這個問題的最好方法?
我正在開發一個使用Asp.net mvc和jquery的應用程序。我想爲不同視圖中的html元素使用相同的命名約定(類和ID)。
如果我想異步加載部分視圖,主視圖中代碼中的$(document).ready()代碼失去了效用,因爲沒有任何patial視圖的html標籤和css命名被jquery識別。我當然不想爲每個視圖編寫相同的代碼。什麼纔是解決這個問題的最好方法?
您可以使用.live()
這一點,例如:
$(".myClass").click(function() { });
變爲這樣:以不同的方式
$(".myClass").live('click', function() { });
.live()
作品。 .click()
綁定到選擇器匹配的元素,當它運行時,通常是document.ready
。 .live()
通過生活在DOM根,偵聽事件冒泡並執行處理程序,如果泡泡的目標與選擇器匹配的事件。
它適用於點擊!對於不同部分視圖中的元素所使用的插件呢?例如,dataTable()jquery插件必須適用於所有具有class =「grid」的元素,而不管它們來自哪個視圖 – xantrus 2010-04-10 18:53:26
如果我正確理解您的問題,那就沒有問題了。您可以在文檔中使用$(「。grid」)。live([eventname],function(){})...將其綁定到您使用的任何部分視圖中的任何事件。 – 2010-04-10 19:15:17
@ user252160 - 你如何加載這些'$ .ajax'? – 2010-04-10 19:15:33
我個人只是使用我自己的包裝器在$ .post周圍加載所有內容,並根據需要初始化內容。這也有助於統一處理錯誤,等待通知等。
第三方庫通常也提供預處理ajax加載內容的方法。
部分視圖不會調用document.ready,但它們將評估頭部腳本標記內的腳本,這樣就可以強制調用部分視圖特定的腳本。
我使用的另一種方法是在窗體上定製html標籤。例如。
<form custom-setup="MyCustomSetupFunc">
和我的$ .post處理程序將檢查此標記並調用此函數,傳遞表單實例。這有助於在部分加載時縮小腳本的範圍(在partial的幾個實例可以加載到同一頁面時有用)。
我添加了一個適用於事件的解決方案,大多數情況下,您還在運行插件等等......如果是的話,您是否可以包含更多關於您需要在動態加載的內容上運行的內容? – 2010-04-10 18:42:51