2012-08-30 47 views
0

我需要這裏的專家的幫助。在選擇日期選擇器中的日期之前觸發函數

當我調用函數v9_insert_comments('1')時,我甚至在datepicker中選擇日期之前觸發警報(sdate)。

我的目標是讓v9_insert_comments()檢查sdate是否爲null。如果它爲null,那麼{return}如果不是{做其他事}。

當前情況下,如果sdate始終爲空,因爲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

在你select_date方法你只是設置的東西了。對$('#dd').dialog()的調用完成了所有jQuery UI魔術來創建一個對話框,方法是更新DOM並進行連線。然後你打電話$('#d1').datepicker(),它以類似的方式設置日期選擇器。它只是說「這個div現在是一個對話框,而這個div現在是一個日期選擇器」。它不等待任何用戶交互。您的v9_insert_comments函數假定事件正在同步發生,而它們實際上是異步發生的。

設置完這些事情之後,您立即要求提供尚未設置的變量的值。它尚未設置,因爲您爲datepicker的onSelect事件提供的匿名函數尚未激活。只有在日期選擇器中選擇了某些內容時纔會調用該功能。所以如果你想用選擇的日期做一些事情,在事件處理程序中執行。

您可以將警報移至事件處理程序,也可以從事件處理程序中調用v9_insert_comments - 但在這種情況下,您應該將呼叫轉移到其他地方的select_date。對話框和日期選擇器只需要設置一次。

相關問題