Loading JQuery scripts to a partial view rendered by ajax call
以下是我的视图,其中包含一个div,其中部分视图基于视图中执行的操作呈现。
1 2 3 4 5 | //Boiler Plate HTML @Html.Partial(Model.PartialView, Model) //Boiler Plate HTML |
部分视图通过ajax调用呈现,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //The url is supplied based on some actions in the main view function AjaxCall(url){ $.ajax({ url: url, cache: false, success: function (html) { $("#PartialViewHolder").empty(); $("#PartialViewHolder").html(html); }, error: function (result) { alert("Error:" + result.status +":" + result.statusText); } }); } |
主页面还会加载一些其他脚本,这些脚本对于部分视图是通用的。 这些脚本在首次呈现页面时起作用,即在呈现默认局部视图时。 但是,这些脚本停止处理由ajax调用加载的部分视图。 我相信当DOM元素发生变化时,需要重新加载这些脚本。 我正在寻找一种干净的方法来重新加载部分视图div时重新加载这些脚本。
你需要做一些关于事件绑定的阅读。http://api.jquery.com/on/
一开始很难理解但是一旦你这么做就值得。
假设你有一些像这样的代码。
1 | Click here to do stuff |
像下面的例子一样的JS代码只适用于你进行绑定时出现的对象(通常是document.ready())看起来这就是你所描述的情况。
1 2 3 4 | $(".magic-link").click(function(){ alert("Magic link clicked"); return false; }) |
如果您希望事件触发尚未加载到页面上的对象,则需要将事件处理程序绑定到容器div,即不更改的位。
像这样
1 2 3 4 | $(".container").on("click",".magic-link", function(){ alert("Magic link clicked"); return false; }); |
事件冒泡到事件处理程序并触发事件。 这具有另一个优点,即一个事件处理程序并可能处理来自数百个对象的事件。
作为指导尝试将侦听器绑定到不会更改的最近的父对象。 在示例的情况下,这是Container div。 这可以使冒泡降至最低。