warnDefault () не работает с элементами SELECT в Firefox 9.0.1 - PullRequest
11 голосов
/ 15 января 2012

Я понимаю, что есть другие вопросы о том, что protectDefault () не работает с Firefox, но они мне не помогли.

У меня есть три списка SELECT, и все, что я хочу, это перемещаться между ними, используяклавиши со стрелками без изменения значений .Код отлично работает в Chrome, но в Firefox он перемещает фокус, а затем изменяет значение только что перемещенного элемента.

http://jsbin.com/ofitif/3/edit

JavaScript:

$(document).ready(function () { 
  $('.myinput').keydown(function (evt) { onkeydown(evt); });
  $('.myinput:first').focus(); 
}); 

function onkeydown(evt) {
  evt.preventDefault();
  console.log(evt.which);
  if(evt.which == 39) {
    $(document.activeElement).next().focus();
  }
  else if(evt.which == 37) {
    $(document.activeElement).prev().focus();
  }             
}

HTML:

<div id="inputs">
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
</div>

Ответы [ 3 ]

1 голос
/ 16 января 2012

nsListControlFrame::KeyPress в http://mxr.mozilla.org/mozilla-central/source/layout/forms/nsListControlFrame.cpp не проверяет, было ли предотвращено действие по умолчанию. Зарегистрировать ошибку?

1 голос
/ 11 декабря 2012

в соответствии с вашим требованием, попробуйте передать значение для предотвращения дефолта .. это будет что-то вроде ниже ..

evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;

у меня сработало плз попробуйте .......

0 голосов
/ 15 января 2012

Возврат false из вашего обработчика keydown:

$('.myinput').keydown(function (evt) { onkeydown(evt); return false; });
...