Jquery 如何在匹配之前更改输入的文本

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

我有一个jQuery.autocomplete字段,表示小数的有限范围。例:

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(',','.'); },
    });
});