-2

重複の可能性:関数値の早期呼び出しを
トリガーする関数

助けが必要です。

私は、私の人生のために、これを理解することはできません。私は頭をその周りに巻きつけただけで無駄になりました。

2つの機能を設定したいのですが。

  1. 関数:select_date()ユーザーと対話して、jQueryの日付ピッカーから日付を選択します。ダイアログが閉じている場合は、nullとして返されます。

  2. 次に、2番目の関数:test()日付がであったかどうかを確認しますpicked/selected

これが私のジレンマです。関数test()が実行されると、アラートボックスがポップアップして表示されます"undefined"。つまり、日付を選択することはできず、常に"undefined"

私はここで私が間違っていることを理解しておらず、すべてが私には論理的であるように思われます。

<!DOCTYPE html>
<html>
<head>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/jquery-ui.js"></script>

    <script type="text/javascript">

    function select_date() {
    var sdate

        $('#dd').dialog({
            autoOpen: true,
            modal: true,
            overlay: {
                opacity: 0.5,
                background: 'black'
            },
            title: "title",
            height: 265,
            width: 235,
            draggable: false,
            resizable: false
        });
        $('#d1').datepicker({
            onSelect: function () {
                $("#dd").dialog("close");
            }
        });
        return sdate
    }

    function test() {
    var x = select_date()

    alert(x)

    }

    </script>
    <style type="text/css">
    #d1 {font-size:64%;}
    </style>
</head>
<body>
<div id="dd">
<div id="d1">
</div>
</div>
<a href="javascript:test()">test</a>
</body>
</html>
4

1 に答える 1

6

これがJavaScriptの動作方法です...とは非同期メソッドでselect_date()あるため、すぐに戻ります。何かが起こる前に呼び出されます。それを行う正しい方法は、からのコールバックメソッドを使用することです.dialog().datepicker()return sdateonSelect()

function select_date(callback) {
  $('#dd').dialog({
        autoOpen: true,
        modal: true,
        overlay: {
            opacity: 0.5,
            background: 'black'
        },
        title: "title",
        height: 265,
        width: 235,
        draggable: false,
        resizable: false
    });
    $('#d1').datepicker({
        onSelect: function () {
            $("#dd").dialog("close");
            callback($(this).datepicker('getDate'));
        }
    });
}

function test() {
  select_date(function(selected_date) { alert(selected_date); });
}

これに関する唯一の問題は、日付が選択されておらず、ダイアログが閉じられている場合、コールバックが呼び出されないことです。ダイアログにそのためのイベントリスナーを追加callbackし、null/undefined値を使用して呼び出すことができますが、それはあなた次第です。

于 2012-08-31T15:43:05.480 に答える