在我多年的.NET编程中,我没有碰到像这一个奇怪的错误。我发现了这个问题,因为页面上的一些元素被jQuery双重约束。经过一些(荒谬的)调试后,我终于发现,一旦视图完全完成渲染本身及其所有子视图的部分视图,它就会回到任意但一致的位置并重新渲染。
我现在已经把头发拉了两天,我只是不能让它自己呈现一次!
由于缺乏更好的调试思路,我在整个HTML中精心添加了日志记录器,因此我可以确定可能导致此问题的原因。例如,此代码($log
只记录到控制台):
...
<script type="text/javascript">var x = 0; $log('1');</script>
<div id="new-ad-form">
<script type="text/javascript">x++;$log('1.5', x);</script>
...
将产生
... <--- this happens before this snippet
1
1.5 1
...
10 <--- bottom of my form, after snippet
1.5 2 <--- beginning of part that runs again!
...
9 <--- this happens after this snippet
我已经搜索了我的代码库的高低,但没有说它应该重新渲染页面的一部分。我想知道jQueryUI是否与它有关,因为#new-ad-form
是jQueryUI对话框的容器。
如果可能的话,这是我的初始代码:
$('#new-ad-form').dialog({
autoOpen:false, 莫代尔:是的, 宽度:470, 标题:'制作新广告', 职位:['中心',35], 关闭:AdEditor.reset });
答案 0 :(得分:2)
正如我在原始问题中所怀疑的那样,问题在于jQueryUI的dialog()
方法。页面呈现后,分配为对话框的元素将被重新呈现,这意味着重新运行该元素中包含或加载的任何Javascript。在我的例子中,我有两个部分视图,它们有自己的JS文件。
我编写了最丑陋的黑客来解决它,但我通过创建一个全局变量并在调用$(function())
中的任何内容之前检查它来实现它。我死了一点写这个黑客,但是哎呀,现在我们可以发货了!
感谢所有试图提供帮助的人!
答案 1 :(得分:1)
检查JavaScript以确保没有意外地将请求返回到同一个控制器。使用Firebug或Fiddler来监视HTTP请求。
答案 2 :(得分:0)
我可能会在这里离开Waaaay但是你把你的脚本包装在$(document).ready()中吗?