2013-05-10 3 views
0

Вы можете ввести в поле назначения/Отели URL: 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();"

что все это? Когда я удаляю атрибуты и onkeyup, он отлично работает. Вот функция, которая запускается время:

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

Что эта функция делает это проблема - вы должны работать, если это необходимо. Если это используется для «исправления» чего-то, это, вероятно, неправильный способ его исправить.

Удалите функцию и все атрибуты с входа, и она будет работать. По какой-то причине функциональность, которую эта функция пытается предоставить, по какой-то причине, это еще один вопрос ...

Смежные вопросы