回调函数值

时间:2012-08-31 15:37:38

标签: javascript jquery html jquery-ui javascript-framework

  

可能重复:
  Function triggering early
  calling a functions value

我需要一些帮助。

对于我的生活,我不能想到这一点。我头上缠着它只是无济于事。

我想设置两个功能。

  1. function:select_date()与用户交互以从jQuery Date选择器中选择日期。如果对话框已关闭,则返回null。

  2. 然后是第二个功能:test(),以检查日期是否为picked/selected

  3. 这是我的困境,当执行函数test()时,会弹出一个警告框并说"undefined",这意味着,我永远不会选择日期,而且始终是"undefined" < / p>

    我看不出我在这里做错了什么,一切对我来说都是合乎逻辑的。

    <!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>
    

1 个答案:

答案 0 :(得分:6)

这是JavaScript的工作方式...... select_date()会立即返回,因为.dialog().datepicker()是异步方法。在发生任何事情之前调用return sdate。正确的方法是使用onSelect()

中的回调方法
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,但这取决于您。