0

我需要这里的专家的帮助。

当我调用函数 v9_insert_comments('1') 时,警报(sdate)在我什至在日期选择器中选择日期之前触发。

我的目标是让 v9_insert_comments() 检查 sdate 是否为空。如果它为空,则只需{返回},如果不是{做其他事情}。

当前情况,如果该 sdate 始终为 null,因为 datepicker 永远没有机会设置它。

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 和连接所有东西来执行所有 jQuery UI 魔术来创建对话框。然后你调用$('#d1').datepicker(),它以类似的方式设置一个日期选择器。它只是说“这个 div 现在是一个对话框,这个 div 现在是一个日期选择器”。它不等待任何用户交互。您的v9_insert_comments函数假设事情是同步发生的,而它们实际上是异步发生的。

设置好这些东西后,您立即询问尚未设置的变量的值。它尚未设置,因为您为 datepickeronSelect事件提供的匿名函数尚未触发。只有在日期选择器中选择了某些内容时才会调用此函数。因此,如果您想对选定的日期执行某些操作,请在事件处理程序中执行。

您可以将警报移动到事件处理程序,或者您可以v9_insert_comments从事件处理程序调用 - 但在这种情况下,您应该将调用移动到select_date其他地方。对话框和日期选择器只需要设置一次。

于 2012-08-30T14:50:56.540 回答