一千萬個為什麽

搜索

如何在匹配前更改輸入的文本

我有一個jQuery.autocomplete字段呈現十進制數的有限範圍。例如:

var the_list = ['+2.23', '+1.10', '-1.10', '-2.00', '-3.00',]

但我允許用戶輸入'2.3'和'-5'等數據。至少我可以得到部分匹配來幫助我,當我開始輸入這些值。

但是如果我(或其他手指笨拙的人)輸入“2,3”(用逗號代替小數點),該怎麽辦?只要我打到逗號,我就沒有匹配。這可以以某種方式解決嗎?

我的想法是在 keydown 上創建一個處理程序。在autocomplet處理程序啟動之前,事件女巫用小數點替換逗號。我試圖添加一個事件處理程序到該字段,但是然後自動完成程序停止一起工作,似乎也沒有辦法指定處理程序的執行順序。

請盡可能告訴我如何做到這一點。歡迎任何建議。

最佳答案

Assuming that you're using the autocomplete plugin for jQuery found here: 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(',','.');
    };

//結束編輯

Here is a link to the plugin directly: Ref: http://www.pengoworks.com/workshop/jquery/lib/jquery.autocomplete.js

轉載註明原文: 如何在匹配前更改輸入的文本