2012-10-01 81 views
1

我有一個頁面上有一個JQuery日期選擇器,用於顯示日/月/年格式。我沒有編寫最初的JQuery,我對它並不是很熟悉,所以這可能是一個簡單的問題,但是當用戶單擊「完成」按鈕時,datepicker會消失一秒鐘,然後打開備份,就好像用戶點擊了一樣再次在文本框中。JQuery DatePicker關閉行爲

用於實例的日期選擇器的代碼是:

$(function() { 
    $('.datepicker').datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     showButtonPanel: true, 
     dateFormat: 'mm/yy', 
     onClose: function(dateText, inst) { 
      var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
      var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); 
      $(this).datepicker('setDate', new Date(year, month, 1)); 
     }, 
     beforeShow: function(input, inst) { 
      if ((datestr = $(this).val()).length > 0) { 
       year = datestr.substring(datestr.length - 4, datestr.length); 
       //month = jQuery.inArray(datestr.substring(0, datestr.length - 5), $(this).datepicker('option', 'monthNames')); 
       month = datestr.substring(0, datestr.length - 5); 
       $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1)); 
       $(this).datepicker('setDate', new Date(year, month-1, 1)); 
      } 
     } 
    }); 
    $("#datepicker").mousedown(function() { 
     $('#ui-datepicker-div').toggle();  
    }); 
}); 

Google上搜尋了一段時間後,我加入了鼠標按下處理程序,因此,當你從日期選擇器在頁面上任意位置單擊消失,那麼它,使得它如預期的那樣關閉,但如果您單擊完成按鈕,它實際上不會關閉日期選擇器。

+0

當你說「當用戶點擊'完成'按鈕時,datepicker會消失一秒鐘,然後再次打開,就好像用戶再次點擊文本框一樣」是錯誤還是預期行爲? –

+0

這就是錯誤。我假設用戶點擊完成後,日期選擇器的目的是將文本框設置爲他們選擇的日期,並使日期選擇器消失,以便用戶可以看到其餘的控件以輸入任何其他信息這是必需的。 –

+0

這似乎只是IE中的一個問題。鉻和FF都按預期行事。 –

回答

0

它按預期工作。我看不出在我設置http://jsfiddle.net/adrianonantua/ZQTqe/

+0

可以通過表單上的驗證使其重新獲得焦點嗎?或者我如何檢查我的前任用來做這件事的JQuery版本?任何想法爲什麼它會按照預期的方式在小提琴中工作,但不在活服務器上? –

+0

邏輯結論是情景不一樣。服務器場景中還有其他事情發生。你提到了表單驗證過程,可能就是這樣。嘗試調試它,在'beforeShow'的第一行放置一個'debugger;'子句並查看堆棧跟蹤以查看誰再次調用它。 –

+0

感謝您的幫助,但我最終完全從頁面中刪除了日期選擇器。它被用來獲得信用卡的到期日期,所以我只是將它切換爲使用兩個組合框而不是日期選擇器。我不知道是什麼導致了這個問題,甚至在哪裏開始尋找,所以我只是把它標記爲失敗的原因。 –

0

我會說,這是問題的小提琴的bug:

$("#datepicker").mousedown(function() { 
    $('#ui-datepicker-div').toggle();  
}); 

它的toogle顯示/隱藏在鼠標按下一個形式,你的日期選擇器會自動當你隱藏點擊日期或完成按鈕。嘗試從你的代碼中刪除這個。

+0

在包含這些行之前,它永遠不會消失,除非您單擊文本框並使用Tab鍵移動到下一個控件。點擊頁面上的任何位置都會導致日期選擇器閃爍,然後再次打開。我已經解決了我最初的問題,我認爲這只是我不熟悉代碼和編寫代碼的人不正確的做法。我已經刪除了有問題的日期選擇器,並找到了另一種實現我所需的方式。 –

+0

我認爲處理程序附加到日期選擇器不輸入框。 – jcubic

+0

datepicker擴展輸入框。所以我認爲他們是一樣的(日期選擇器不能沒有輸入框存在,輸入框只是沒有日期選擇器的文本字段)。就處理程序而言,我不知道屬於哪個控件。這並不重要,我敢肯定這只是巧合的混搭而已,這導致了我最初的問題,並且我不想再追蹤它,因爲將日期分成兩個不同的字段是最直觀的方法用戶輸入信息開始。 –