2012-10-29 101 views
6

我正在使用jQuery插件與文本框一起使用,我希望它可以使用使用文本框的jQueryUI小部件,如datepicker。這引起了我的問題,因爲在實際設置值之前,datepicker上的blur事件似乎被拋出。附加到jQuery Datepicker模糊事件

我已經使用的解決方法是在執行我的代碼之前設置超時以允許設置datepickers值的時間。見下面的代碼:

$(this).blur(function() { 
    // $(this).val() == "" 
    var elem = $(this); 
    setTimeout(function() { 
     //elem.val() != "" 
    },100); 
}); 

我不確定這個解決方法是問題的最佳解決方案,或者即使它會一直工作。如果我將超時設置爲10毫秒而不是100,那麼它不起作用 - 我擔心如果代碼執行緩慢,無論出於何種原因,100可能並不總是足夠的。

任何人都可以想出更好的解決方案來解決這個問題嗎?

回答

6

在結束我的解決辦法是動態掛鉤到onClose事件如果有問題的文本是由一個datepicker使用(通過檢查hasDatepicker類)。問題在於你不能像通常那樣綁定事件,因爲日期選擇器只能將一個函數附加到它的特定事件上。爲了解決這個問題我檢查,如果有一個函數已經連接,如果是我的代碼之後調用它:

var elem = $(this); 
var someFunction = function() { 
    //elem.val() != "" 
} 
if (elem.hasClass('hasDatepicker')) { 
    var onClose = elem.datepicker('option','onClose'); 
    elem.datepicker('option','onClose', function() { 
     someFunction(); 
     if (onClose) { onClose(elem.val()); } 
    }); 
} else { 
    elem.bind('blur',someFunction); 
} 
5

在datepicker中有幾個事件可以綁定到onSelectonClosethis其中是datepicker選擇器的輸入。 您可以使用日期選擇器ui參數來獲取值也

$(selector).datepicker({ 
    onClose:function(evt, ui){    
      $(this).myPlugin('someMethod'); 
    }) 
}) 
+0

$( ).datepicker('option','onSelect',function(){...}); – JakeRobb

0

這是更簡單的方式做到這一點:「datepickerSelect」

$('#element').datepicker({ 
    onClose: function() { 
     $(this).trigger('change'); 
    } 
}); 


$('#element').bind('change',function(){ 
    // someFunction(); 
});