2012-08-31 112 views
-2

可能重複:
Function triggering early
calling a functions value調用回函數值

我需要一些幫助。

我不能,爲了我的生活,弄清楚這一點。我的腦袋只是無用而已。

我想設置兩個功能。

  1. 功能:select_date()與用戶進行交互,以選擇從jQuery日期選擇器的日期。如果對話框關閉,則返回爲空。

  2. 然後第二個函數: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> 
+1

那麼你在哪裏設置'sdate'的值,那麼它不會自己設置? – adeneo

+0

'sdate'在哪裏設置? –

+1

它是如何合乎邏輯的,在你的select_date()中,你聲明sdate並做一些不相關的操作並返回sdate,這顯然是未定義的。 – yngccc

回答

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,但這取決於您。

+0

使用正確的方法更新以獲取日期。謝謝。雖然這裏的'this'是輸入字段,請參閱文檔http://jqueryui.com/demos/datepicker/#event-onSelect – Brendan

+0

哇!我對此非常感興趣並且印象深刻。非常感謝你的代碼和令人敬畏的幫助Brendan。乾杯,傑伊 –