我在一个页面上加载了一个select标记,其中包含从ajax调用到服务的选项。它工作得很好,并且正确加载了select标记。我只希望这种加载在用户第一次到达页面时发生一次,所以我将对执行此操作的函数的调用放在$(document).ready(函数调用)中。我看到的问题是,当用户选择其中一个选项,然后在特定情况下单击按钮时,我会弹出一个对话框(jQuery UI),告诉他们需要采取特定操作。第一次发生这种情况,而且只是第一次选定的选项以某种方式重置为列表中的第一个选项。我在调试中运行了很多次,发现如果这是第一次在页面上加载选择器,那么选择器在到达页面时就会按预期加载,但如果对话框弹出,它会再次加载——只是第一次加载——之后如果对话框弹出了,则不会重新加载,一切都很好。缩写代码:
$(document).ready(function () {
$.fn.LoadStuff();
});
jQuery.fn.LoadStuff = function () {
//load up the select tag with options
};
LoadStuff
在其他任何地方都不会被调用。selOffers是选择标记,dvConflict是对话框。他们没有共享一个共同的父类。
<select id="selOffers"></select>
<div id="dvConflict"><div id="dvConflictMsg" /></div>
对话框的jQuery:
var optSave = {
width: 400,
modal: true,
resizable: false,
draggable: false,
closeOnEscape: true,
zIndex: 1320,
buttons: [
{
text: 'Ok',
click: function () {
$(this).dialog('close');
}
}
]
}
$(".ui-dialog-titlebar").hide(); //Hides the title
$('#dvConflict').css('background','none')//去掉我们的自定义背景$('#dvConflict').dialog(optSave);
编辑:两件事
-
使用
$.LoadStuff = function () { }
而不是$.fn.LoadStuff = function () {...}
。第一种是通过$.LoadStuff();
在任何上下文中调用。后者将用于元素选择,如$("div.to-load").LoadStuff();
。 -
每当DOM完成加载时,就会触发CCD_ 6。在一些AJAX调用中,您可以重新加载DOM的一部分,或者一个内部框架(我不知道,尽管我没有您的代码)。
以下代码示例将帮助您绕过该问题:
var first = true; $(document).ready(function () { if (first) $.LoadStufF(); ... first = false; }
-
打开对话框时,请确保对话框包装的元素中没有
<script>
标记。假设你有代码行:$('#dialoged').dialog({ ... });
因此,一个糟糕的做法是:
<div id="dialoged"> <script> var first = true; $(document).ready(function () { if (first) $.LoadStufF(); ... first = false; } </script> </div>