Jquery 如何在匹配之前更改输入的文本
我有一个jQuery.autocomplete字段,表示小数的有限范围。例:Jquery 如何在匹配之前更改输入的文本,jquery,autocomplete,Jquery,Autocomplete,我有一个jQuery.autocomplete字段,表示小数的有限范围。例: var the_list = ['+2.23', '+1.10', '-1.10', '-2.00', '-3.00',] 但是我允许用户输入像“2.3”和“-5”这样的数据。当我开始输入这些值时,至少我可以得到部分匹配来帮助我 但如果我(或其他手指笨拙的人)输入“2,3”(用逗号而不是小数点),该怎么办。只要我一按逗号,我就找不到匹配项。这个问题可以通过某种方式解决吗 我的想法是在启动自动完成处理程序之前,在key
var the_list = ['+2.23', '+1.10', '-1.10', '-2.00', '-3.00',]
但是我允许用户输入像“2.3”和“-5”这样的数据。当我开始输入这些值时,至少我可以得到部分匹配来帮助我
但如果我(或其他手指笨拙的人)输入“2,3”(用逗号而不是小数点),该怎么办。只要我一按逗号,我就找不到匹配项。这个问题可以通过某种方式解决吗
我的想法是在启动自动完成处理程序之前,在keydown事件上创建一个处理程序,将逗号替换为小数点。我曾尝试将eventhandler添加到字段中,但随后自动完成程序停止一起工作,并且似乎也无法指定处理程序的执行顺序
如果可能的话,请告诉我如何做到这一点。欢迎您提出任何建议。假设您使用的是jquery的自动完成插件,请参见: 然后修改插件文件以更改此设置:
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();
}
};
//结束编辑
以下是直接指向插件的链接:
参考:非常感谢DismissedDrone,通过它,我成功地让我的东西运转起来。不过,我对建议的解决方案做了一点修改,因为我想更新inputbox的实际值,而不仅仅是搜索中使用的值 这就是我所做的 我从jQuery的自动完成插件(v1.0.2)开始 我在$.Autocompleter中添加了一个预过滤器选项(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(',','.'); },
});
});
非常好的建议。但我使用的是重写您建议的模块:。我认为可以使用一个新选项对其进行修补,这样它就可以像这样使用:$(“#theThing”).autocomplete(列表,{minChars:0,selectFirst:false,matchContains:true,//和新选项fixBadChars:function(searchTerm){return searchTerm.replace(','.);},});有人能帮我吗?你应该可以在$Autocompleter.defaults对象中添加类似filter:function(raw){return raw.replace('','.');},然后在onChange函数中,在“var currentValue=$input.val();”之后添加行“currentValue=options.filter(currentValue);”默认情况下,这将运行逗号替换,但通过将匿名函数传递给options对象中的filter变量,您可以更改函数。
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(',','.'); },
});
});