在ASP.NET MVC View上给出以下代码:
<% 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)无济于事。
在$(function(){...})中调用BindCommunityHover方法;当页面首次加载时阻塞,对于所有现有的.community-item-li元素,它都有效。
我的控制器的部分结果会将该div中的所有项目替换为更多相同的类。应该在文档更新后触发OnSuccess方法。
更新:k ......这很奇怪。我在BindCommunityHover方法中添加了以下内容:
alert($(".community-item-li").size());
当页面加载和回调触发时,我在警报中得到240。因此,回调是触发,jQuery匹配元素但不应用样式......
答案 0 :(得分:2)
那是因为你的函数基本上是为所有这些项添加一个悬停事件,因为它们存在于调用函数的时间点。
如果您随后添加新元素,则不会自动绑定它们。 JQuery中有一个名为Live Events的新功能。我没有挖到他们,但我认为他们可能会帮助他们。否则,当您添加新元素时,请务必绑定悬停函数。
答案 1 :(得分:0)
好的,这个解决方案有两个部分。
第一个罪魁祸首是一些讨厌的缓存,我在Cassini / IE中无法弄清楚。我尝试重新启动,停止卡西尼,重新启动VS2010 ......没有任何效果。
此计算机上的代码仍无法在我帐户上的IE上运行。部署到IIS的版本适用于所有浏览器。如果我更改文件名,它也适用于IE。但是那里有东西被塞进去了。如果我用Cassini / IE运行该项目,然后打开FireFox并转到该站点,它可以工作。我试图重新发出错误来提交错误,但我无法让它去。我离题了。为了解决这个问题,我更改了.js文件的名称,并将引用移动到母版页中的其他位置。
另一件事是我确实必须使用OnSuccess。当我试图找出问题时,我转而使用OnComplete。在我弄清楚文件/浏览器/服务器问题后,我意识到OnComplete(根据文档)在文档更新之前触发;元素正在更新,但随后被抛弃。
OnSuccess / OnComplete可能有助于为某人排序,不确定文件/浏览器/服务器问题......可能是环境问题。