回调函数值[重复]

Posted

技术标签:

【中文标题】回调函数值[重复]【英文标题】:Calling back a functions value [duplicate] 【发布时间】:2012-08-26 11:04:14 【问题描述】:

可能重复:Function triggering earlycalling a functions value

我需要一些帮助。

我这辈子都想不通。我已经把我的头缠在它周围,但无济于事。

我想设置两个功能。

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

    然后是第二个函数: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>

【问题讨论】:

那么你在哪里设置sdate 的值,那么它不会自己设置??? sdate 在哪里设置? 逻辑如何,在你的select_date()中,你声明了sdate,做一些不相关的操作,返回sdate,显然是未定义的。 【参考方案1】:

这就是 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); );

唯一的问题是如果没有选择日期并且对话框关闭,回调将不会被调用。您可以在对话框中为此添加一个事件侦听器,并使用 null/undefined 值调用 callback,但这取决于您。

【讨论】:

已更新,使用正确的方法获取日期。谢谢。尽管this 在该上下文中是输入字段,但请参阅文档jqueryui.com/demos/datepicker/#event-onSelect 哇!我对此非常感兴趣和印象深刻。非常感谢您提供代码和 Brendan 的出色帮助。干杯,杰

以上是关于回调函数值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

ES6回调的默认值参数[重复]

处理回调函数[重复]

Javascript-地图和回调-返回值不受影响[重复]

如何创建从回调函数返回承诺的函数[重复]