我听说过jQuery有多么优雅和优雅的所有这些经验,但由于性能不佳,我试图在实际项目中实现jQuery控件。这次我遇到了与Richard类似的问题。 jQuery UI DatePicker在我正在处理的ASP.NET应用程序中失败了用户验收测试,因为在输入文本框时,在输入最后两个数字时会有一些滞后。 (例如'1/1/20 10 ')。
有没有人知道一个选项/方法可以阻止jQuery UI干扰用户在与之绑定的文本框中的输入?
答案 0 :(得分:3)
我在IE 6中遇到了同样的问题。 我使用了一个性能工具(DynaTrace Ajax版)来查看滞后的位置,并在密钥事件上执行的更新日期函数中找到它。 所以,我的工作是停用keyup事件。
$( "#idOfTheInput" ).unbind("keyup");
编辑:这样做有一个缺点。手动输入日期时,不会刷新日期选择器。
那么,另一个(更好的?)解决方案是仅在用户点击带有showOn: 'button'
选项的小按钮时显示日期选择器(此处有更多信息:http://jqueryui.com/demos/datepicker/#icon-trigger)
然后,仅在显示日期选择器时更改JQuery datepicker代码以刷新日期。为此,找到_doKeyUp
函数并添加一个条件,说明“如果显示日期选择器,请执行更新,否则不要刷新”。
_doKeyUp: function(event) {
var inst = $.datepicker._getInst(event.target);
if ($.datepicker._datepickerShowing) {
if (inst.input.val() != inst.lastVal) {
try {
var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
(inst.input ? inst.input.val() : null),
$.datepicker._getFormatConfig(inst));
if (date) { // only if valid
$.datepicker._setDateFromField(inst);
$.datepicker._updateAlternate(inst);
$.datepicker._updateDatepicker(inst);
}
}
catch (event) {
$.datepicker.log(event);
}
}
}
return true;
},
当然,更改插件的代码有点讨厌......
答案 1 :(得分:3)
要扩展Jason所说的内容,您可以通过执行此操作覆盖基本ui文件之外的方法
jQuery(function(){
jQuery.datepicker._doKeyUp = function(event) {
var inst = jQuery.datepicker._getInst(event.target);
if(jQuery.datepicker._datepickerShowing) {
if(inst.input.val() != inst.lastVal) {
try {
var date = jQuery.datepicker.parseDate(jQuery.datepicker._get(inst, 'dateFormat'),
(inst.input ? inst.input.val() : null),
jQuery.datepicker._getFormatConfig(inst));
if(date) { // only if valid
jQuery.datepicker._setDateFromField(inst);
jQuery.datepicker._updateAlternate(inst);
jQuery.datepicker._updateDatepicker(inst);
}
}
catch (event) {
jQuery.datepicker.log(event);
}
}
}
return true;
}
});
.......