繁体   English   中英

AJAX操作完成时未触发Javascript回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM