2013-05-10 69 views
0

您可以在现场目标类型/酒店 网址: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(),也没有奏效。

任何人都可以找到,请

回答

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; 
} 

这个函数做的是什么问题 - 你需要弄清楚这是否有必要。如果这被用来“修复”某些东西,那可能是修复它的错误方法。

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