0

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

它会自动建议你。功能工作正常。但是,当您按下左/右箭头键时,光标会像往常一样在除 chrome 之外的所有浏览器中向左/向右移动。

我试图修改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
    };

但问题并没有得到解决。我试过 return false; 这也没有奏效。我试过 event.preventDefault() 也没有用。

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

4

1 回答 1

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();"

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

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

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

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

于 2013-05-10T13:57:00.963 回答