【发布时间】:2013-09-17 02:28:00
【问题描述】:
我有一个 asp.net 页面,它在我当前正在工作的选项卡中返回部分视图。我已经设置了 jQuery,它可以工作。它工作一次,并通过 ajax 返回部分视图.html(result);
但是,这只适用于一次。我单击按钮,它在幕后完成所有应有的操作,它按应有的方式替换了 html。然后,当我再次单击该按钮时,就像这些按钮不再存在 jQuery 一样。没有页面重新加载,这都是通过 ajax 完成的。
第一次加载页面时使用的 HTML 和通过 .html(result) 返回的 HTML 是完全相同的 html 相同的部分视图用于两者。
返回这个局部视图时,我的 jQuery 是否以某种方式断开连接?
这是我的 Ajax 调用:
function updateSort(object) {
jQuery.ajax({
url: "/MasterList/UpdateSort",
type: "get",
data: object, //if you need to post Model data, use this
success: function (result) {
//alert('success');
//console.log(result);
jQuery("#procedures").html(result);
}
});
}
这里是按钮点击:
jQuery(".btnMoveUp").click(function () {
var $this = jQuery(this),
processID = $this.data('processid'),
currProcedureID = $this.data('procedureid'),
currSortOrder = $this.data('sortorder'),
idx = jQuery('.commentlist li').index($this.closest('li')),
$prevLi = jQuery('.commentlist li').eq(idx - 1),
$anchor = $prevLi.find('.btnContainer a'),
prevProcedureID = $anchor.data('procedureid'),
prevSortOrder = $anchor.data('sortorder');
// create object that we can pass to MVC controller
var objProcedure = {};
objProcedure = {
_processID: processID,
_currProcedureID: currProcedureID,
_currSortOrder: currSortOrder,
_switchProcedureID: prevProcedureID,
_switchSortOrder: prevSortOrder
}
updateSort(objProcedure);
});
为什么这只工作一次?
【问题讨论】:
-
如果绑定了事件处理程序的元素位于被替换的 html 中,那么是的,您将丢失这些绑定。加载新的 html 后重新绑定,或者使用事件委托。
-
我猜你正在用新元素替换元素,即使标记完全相同,元素也不相同,并且事件处理程序将丢失。您需要的是事件委托。
-
@adeneo 是的,整个 div 正在被部分视图的新结果替换。
-
@Adeneo 我试图将我的 jQuery 更改为使用 .on('click' 但这似乎没有解决任何问题。这是我所缺少的吗?还是我真的必须重新绑定它们我的 Ajax 成功部分?重复代码似乎很多。
-
@adeneo 没关系,我修好了。我只是将我的点击事件扔到一个函数中,在初始加载时调用该函数,然后在我的 .success 回调中调用它。
标签: jquery html ajax asp.net-mvc