Chrome中的自动填充问题

时间:2013-05-10 13:42:22

标签: javascript jquery google-chrome autocomplete

您可以在目的地/酒店字段中输入内容 网址:http://think.thinkhotels.com/

它会自动建议你。功能正常。但是当你按左/右箭头键时,光标会像往常一样左右移动所有浏览器除铬

我尝试修改http://think.thinkhotels.com/autofill/jquery.autocomplete.js

中的代码

它有一个代码

$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
        // a keypress means the input has focus
        // avoids issue where input had focus before the autocomplete was applied
        hasFocus = 1;
        // track last key pressed

        lastKeyPressCode = event.keyCode;
        switch(event.keyCode) {

            case KEY.UP:
                event.preventDefault();
                if ( select.visible() ) {
                    select.prev();
                } else {
                    onChange(0, true);
                }
                break;

我添加了几行,以避免下面左/右箭头中的任何操作是修改后的代码

$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
        // a keypress means the input has focus
        // avoids issue where input had focus before the autocomplete was applied
        hasFocus = 1;
        // track last key pressed

         if(event.which ==KEY.LEFT  || event.which == KEY.RIGHT ) {
        return true;
        }

        lastKeyPressCode = event.keyCode;
        switch(event.keyCode) {

            case KEY.UP:
                event.preventDefault();
                if ( select.visible() ) {
                    select.prev();
                } else {
                    onChange(0, true);
                }
                break;

密钥如下

var KEY = {
        UP: 38,
        DOWN: 40,
        DEL: 46,
        TAB: 9,
        RETURN: 13,
        ESC: 27,
        COMMA: 188,
        PAGEUP: 33,
        PAGEDOWN: 34,
        BACKSPACE: 8,
        LEFT:   37,
        RIGHT:  39
    };

但问题没有解决。 我试过返回false;这也没用。我试过了也没用的event.preventDefault()。

任何人都可以找到解决方案

1 个答案:

答案 0 :(得分:0)

jQuery自动完成不是问题,它自己处理左右键:

case KEY.LEFT:
case KEY.RIGHT:
  //Do nothing
  break;

问题是你在输入栏上有这些属性:

onfocus="clearVal(), assignVal();" onchange="javascript: assignVal();" onblur="javascript: assignVal();" onclick="javascript: assignVal();" onkeypress="javascript: assignVal();" onkeyup="javascript: assignVal();"

这是为了什么?当我删除onkeypressonkeyup属性时,它可以正常工作。这是被触发的功能:

function assignVal()
{
  var n=document.getElementById("city_t").value.split(" (");
  document.getElementById("city_t").value = n[0].replace(/\//g,"");
  document.getElementById("city").value = n[0].replace(/\//g,"");
  return true;
}

这个功能正在做的是问题 - 如果有必要,你需要解决。如果这被用来“修复”某些东西,那么修复它可能是错误的方法。

从输入中删除函数和所有属性,它将起作用。如果出于某种原因需要此功能试图提供的功能,那就是另一个问题......