0

サービスへの ajax 呼び出しから取得するオプションを含む選択タグをロードしているページがあります。正常に動作し、選択タグを正しくロードしています。ユーザーが最初にページに到着したときに一度だけこの読み込みが発生するようにしたいので、これを行う関数への呼び出しを $(document).ready(function 呼び出しの中に入れます。私が見ている問題は、ユーザーがオプションの1つを選択し、特定の状況下でボタンをクリックすると、特定のアクションを実行する必要があることを伝えるダイアログ(jQuery UI)が表示されます.これが初めて発生し、選択したオプションが何らかの形でリセットされるのは初めてですリストの最初のオプション。私は何度もデバッグを実行し、これがページで初めての場合、期待どおりにページに到着するとセレクターがロードされることを発見しましたが、ダイアログがポップされた場合、それは再びロードされます-初回のみ-その後ダイアログがポップされ、リロードは発生せず、すべて問題ありません。短縮されたコード:

$(document).ready(function () {
    $.fn.LoadStuff();
});

jQuery.fn.LoadStuff = function () {
    //load up the select tag with options
};

LoadStuff他の場所では呼び出されません。selOffers は選択タグで、dvConflict はダイアログです。共通の親 div を共有していません。

<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('背景', 'なし'); //カスタム背景を取り出します $('#dvConflict').dialog(optSave);

4

1 に答える 1

1

編集: 2つのこと

  1. $.LoadStuff = function () { }の代わりに使用し$.fn.LoadStuff = function () {...}ます。1 つ目は、 を介して任意のコンテキストで呼び出されます$.LoadStuff();。後者は、 のような要素選択で使用され$("div.to-load").LoadStuff();ます。

  2. $(document).readyDOM の読み込みが完了するたびに発生します。一部の 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>
    
于 2013-08-13T13:44:11.467 に答える