[英]Javascript callback not firing when AJAX operation complete
在ASP.NET MVC视图上给出以下代码:
<% using (Ajax.BeginForm("AddCommunity",
new AjaxOptions { UpdateTargetId = "community-list",
OnSuccess = "BindCommunityHover" }))
{ %>
Add Community: <input type="text" id="communityName" name="communityName" />
<input type="submit" value="Add" />
<% } %>
以及文件中的以下JavaScript方法:
function BindCommunityHover() {
$(".community-item-li").hover(
function () { $(this).addClass("communityHover"); },
function () { $(this).removeClass("communityHover"); }
);
};
AJAX结果返回时,为什么没有调用BindCommunityHover的原因是什么?
社区列表div已正确更新(该操作返回部分视图)。 我也尝试将OnComplete(而不是OnSuccess)设置为无效。
BindCommunityHover方法在$(function(){...})中调用; 在页面首次加载时阻止,并且对于所有现有的.community-item-li元素,它都起作用。
我的控制器的部分结果将该div中的所有项目替换为更多相同的类。 文档更新后,应触发OnSuccess方法。
更新 :k ...这变得很奇怪。 我在BindCommunityHover方法中添加了以下内容:
alert($(".community-item-li").size());
当页面加载和回调触发时,我的警报中收到240。 因此,回调IS触发了,jQuery正在匹配元素但未应用样式...
那是因为您的函数基本上是说要为所有这些项添加一个悬停事件,因为它们存在于调用函数的时间点。
如果您随后添加新元素,它们不会自动绑定。 JQuery中有一项名为“实时事件”的新功能。 我没有深入研究它们,但我认为它们可能会在这里有所帮助。 否则,在添加新元素时,请确保绑定悬停功能。
好的,此解决方案有两个部分。
罪魁祸首是我在Cassini / IE中无法弄清的一些令人讨厌的缓存内容。 我尝试重新启动,停止Cassini,重新启动VS2010 ...无济于事。
该代码仍无法在这台计算机上我的帐户上的IE上运行。 部署到IIS的版本可在所有浏览器上使用。 如果我更改文件名,它也可以在IE中使用。 不过,那里有些烦人。 如果我使用Cassini / IE运行该项目,则打开FireFox并转到该站点即可。我试图重现该错误以提交错误,但我无法解决它。 我离题了。 为了解决这个问题,我更改了.js文件的名称,并将引用移至母版页中的其他位置。
另一件事是我必须使用OnSuccess。 当我试图找出问题出在哪里时,我转而使用OnComplete。 在弄清文件/浏览器/服务器问题之后,我意识到(在文档中)会触发OnComplete(在文档更新之前 )。 元素被更新,但随后被丢弃。
OnSuccess / OnComplete可能有助于解决某人的问题,不确定文件/浏览器/服务器问题...可能是环境问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.