我需要专家的帮助。
当我调用函数v9_insert_comments('1')时,警报(sdate)会在我甚至在datepicker中选择日期之前触发。
我的目标是让v9_insert_comments()检查sdate是否为null。如果它为null,则只返回{return},如果不是{do something else}。
当前情况,如果该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 -->
答案 0 :(得分:0)
在您的select_date
方法中,您只是设置内容。对$('#dd').dialog()
的调用通过更新DOM和连接来完成所有jQuery UI魔术以创建对话框。然后你调用$('#d1').datepicker()
,它以类似的方式设置一个日期选择器。它只是说“这个div现在是一个对话框,而这个div现在是一个日期选择器”。它不是在等待任何用户交互。你的v9_insert_comments
函数假设事情是同步发生的,而它们实际上是异步发生的。
设置完这些内容后,您会立即询问尚未设置的变量的值。它尚未设置,因为您为datepicker的onSelect
事件提供的匿名函数尚未触发。只有在datepicker中选择了某些内容时才会调用此函数。因此,如果您想对所选日期执行某些操作,请在事件处理程序中执行此操作。
您可以将警报移至事件处理程序,也可以从事件处理程序中调用v9_insert_comments
- 但在这种情况下,您应该将调用移至其他位置的select_date
。对话框和日期选择器只需要设置一次。