0

ここで専門家の助けが必要です。

関数v9_insert_comments( '1')を呼び出すと、日付ピッカーで日付を選択する前に、alert(sdate)がトリガーされます。

私の目標は、v9_insert_comments()でsdateがnullかどうかを確認することです。nullの場合は、{return}、そうでない場合は{何か他のことを行う}。

日付ピッカーが設定する機会がないため、その日付が常にnullである場合の現在のケース。

var sdate

//========================================================================
  function v9_insert_comments(x) {
//========================================================================

    if (x == 1) {
            select_date()
            alert(sdate)
    }


}//end of function


//========================================================================
  function select_date() {
//========================================================================
    $('#dd').dialog({
        autoOpen: true,
        modal: true,
        overlay: {
            opacity: 0.5,
            background: 'black'
        },
        title: "title",
        height: 265,
        width: 235,
        draggable: false,
        resizable: false

    }); //end of dialog

    $('#d1').datepicker({
        onSelect: function() {
            sdate = $(this).val();
            $("#dd").dialog("close");

        }
    });

} //end of function

体:

<!-- START OF DATE SELECTOR DIALOG -->
<div style="display:none" id="dd">
<div id="d1"></div>
</div>
<!-- END OF DATE SELECTOR DIALOG -->
4

1 に答える 1

0

あなたのselect_date方法では、あなたはただ物事を設定しているだけです。の呼び出し$('#dd').dialog()は、DOMを更新して接続することにより、すべてのjQueryUIマジックを実行してダイアログを作成します。次に$('#d1').datepicker()、を呼び出します。これは、同様の方法で日付ピッカーを設定します。「このdivはダイアログになり、このdivは日付ピッカーになりました」とだけ言っています。ユーザーの操作を待っているわけではありません。あなたのv9_insert_comments関数は、物事が同期的に起こっていると想定していますが、実際には非同期的に起こっています。

これらを設定したら、すぐにまだ設定されていない変数の値を要求します。datepickerのonSelectイベントに指定した匿名関数がまだ起動されていないため、設定されていません。この関数は、日付ピッカーで何かが選択された場合にのみ呼び出されます。したがって、選択した日付で何かを実行したい場合は、イベントハンドラーで実行してください。

アラートをイベントハンドラーに移動することも、イベントハンドラーから呼び出すこともできますv9_insert_commentsが、この場合は、呼び出しを別の場所に移動する必要がありselect_dateます。ダイアログと日付ピッカーは一度だけ設定する必要があります。

于 2012-08-30T14:50:56.540 に答える