7

我正在开发一个用于文本框的 jQuery 插件,我希望它可以与使用文本框的 jQueryUI 小部件一起使用,例如 datepicker。这给我带来了问题,因为日期选择器上的模糊事件似乎是在实际设置值之前引发的。

我使用的一种解决方法是在执行我的代码之前设置一个超时,以便有时间设置 datepickers 值。见下面的代码:

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

我不确定这种解决方法是否是问题的最佳解决方案,或者即使它总是有效。如果我将超时设置为 10 毫秒而不是 100 毫秒,则它不起作用 - 我担心代码是否由于某种原因执行缓慢,100 可能并不总是足够的。

谁能想到一个更好的解决这个问题的方法?

4

3 回答 3

7

onClose最后,我的解决方案是,如果有问题的文本框被日期选择器使用(通过检查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);
}
于 2012-10-30T09:07:11.777 回答
5

您可以将 datepicker 中的几个事件绑定到其中,onSelect或者在它们中是 datepicker selector 的输入。您也可以使用 datepicker参数来获取值onClosethisui

$(selector).datepicker({
     onClose:function(evt, ui){             
          $(this).myPlugin('someMethod');
     })
})
于 2012-10-29T18:11:24.703 回答
1

这是更简单的方法:

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


$('#element').bind('change',function(){
    // someFunction();
});
于 2015-04-03T14:49:55.323 回答