jQuery $(document).ready() issue - jQuery 1.7.2



我在一个页面上加载了一个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);

编辑:两件事

  1. 使用$.LoadStuff = function () { }而不是$.fn.LoadStuff = function () {...}。第一种是通过$.LoadStuff();在任何上下文中调用。后者将用于元素选择,如$("div.to-load").LoadStuff();

  2. 每当DOM完成加载时,就会触发CCD_ 6。在一些AJAX调用中,您可以重新加载DOM的一部分,或者一个内部框架(我不知道,尽管我没有您的代码)。

    以下代码示例将帮助您绕过该问题:

    var first = true;  
    $(document).ready(function () {  
        if (first) $.LoadStufF();  
        ...    
        first = false;  
    }
    
  3. 打开对话框时,请确保对话框包装的元素中没有<script>标记。假设你有代码行:

    $('#dialoged').dialog({ ... });
    

    因此,一个糟糕的做法是:

    <div id="dialoged">
        <script>
             var first = true;  
             $(document).ready(function () {  
                 if (first) $.LoadStufF();  
                     ...    
                 first = false;  
             }
         </script>
    </div>
    

最新更新