我有一个jQuery.autocomplete字段,显示有限范围的十进制数字。例如:
var the_list = ['+2.23', '+1.10', '-1.10', '-2.00', '-3.00',]
但我允许用户输入“2.3”和“-5”等数据。当我开始输入这些值时,至少我可以得到部分匹配来帮助我。
但是,如果我(或其他手指笨拙的人)输入'2,3'(用逗号而不是小数点),该怎么办?一旦我点击逗号,我就不会得到任何匹配。这可以通过某种方式解决吗?
我的想法是在 keydown上创建一个处理程序 -event在autocomplet-handler启动之前用小数点替换逗号。我试图在字段中添加一个事件处理程序,但随后自动完成程序停止工作,并且似乎无法指定处理程序的执行顺序。
如果可能的话,请告诉我如何做到这一点。欢迎任何建议。
答案 0 :(得分:2)
假设您正在使用此处找到的jquery的自动完成插件: http://www.pengoworks.com/workshop/jquery/autocomplete.htm
然后修改插件文件以更改此内容:
function onChange() {
// ignore if the following keys are pressed: [del] [shift] [capslock]
if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
var v = $input.val();
if (v == prev) return;
prev = v;
if (v.length >= options.minChars) {
$input.addClass(options.loadingClass);
requestData(v);
} else {
$input.removeClass(options.loadingClass);
$results.hide();
}
};
到此:
function onChange() {
// ignore if the following keys are pressed: [del] [shift] [capslock]
if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
var v = $input.val();
v = fixBadChars(v);
if (v == prev) return;
prev = v;
if (v.length >= options.minChars) {
$input.addClass(options.loadingClass);
requestData(v);
} else {
$input.removeClass(options.loadingClass);
$results.hide();
}
};
function fixBadChars(v) {
// Customize this to your tastes
return v.replace(',','.');
};
我只是快速浏览一下这个插件,但我猜/希望这可能会有用......
//开始编辑 两者之间的差异是:
v = fixBadChars(v);
function fixBadChars(v) {
// Customize this to your tastes
return v.replace(',','.');
};
//结束编辑
以下是该插件的直接链接: 参考:http://www.pengoworks.com/workshop/jquery/lib/jquery.autocomplete.js
答案 1 :(得分:0)
非常感谢DismissedAsDrone帮助我设法让我的东西工作。我对建议的解决方案稍作修改,因为我想更新输入框的实际值,而不仅仅是搜索中使用的值。
我开始使用jQuery的this autocomplete-plugin(v1.0.2)。
我在 $。Autocompleter.defaults 对象代码中添加了一个preFilter选项(1行代码):
$.Autocompleter.defaults = {
inputClass: "ac_input",
...,
preFilter: function(value) { return value; },
...
在onChange函数中,我在 var currentValue ... 行之后添加了preFilter(4行代码)的用法:
var currentValue = $input.val();
if ( options.preFilter(currentValue) != currentValue ) {
$input.val(options.preFilter(currentValue));
return;
}
要使用新选项来解决我的具体问题,我就这样使用它:
$(function() {
$("#the_inputfield").autocomplete(the_data, {
minChars: 0,
max: 100,
selectFirst: false,
matchContains: true,
preFilter: function(value) { return value.replace(',','.'); },
});
});