keydown Событие для переопределения ключа возврата не работает в Firefox - PullRequest
3 голосов
/ 05 октября 2010

У меня есть следующий простой код javascript, который обрабатывает клавишу возврата. Я не хочу отправлять форму при нажатии клавиши возврата в текстовом поле.

Все это работает нормально, но в Firefox, если я показываю предупреждающее сообщение, оно перестает работать, и форма начинает отправляться, тогда как точный код без предупреждающего сообщения работает нормально и не дает форме отправляться. Я не понимаю, почему оповещение портит вечеринку ..

    $("document").ready(function () {
        $("#input1").keydown(OnKeyDown);
    });


    function OnKeyDown(e) {
        if (e.keyCode == 13) {

            // alert('this will fail');  // Adding alert makes the form submit

            stopBubble(e);
            return false;
        }
    }

    function stopBubble (e) {

        // If an event object is provided, then this is a non-IE browser
        if (e && e.stopPropagation)
        // and therefore it supports the W3C stopPropagation() method
            e.stopPropagation();
        else
        // Otherwise, we need to use the Internet Explorer
        // way of cancelling event bubbling
            window.event.cancelBubble = true;
    }


  <input type="text" id="input1" value="">

Ответы [ 3 ]

4 голосов
/ 05 октября 2010

Я действительно не знаю, нормализовано ли событие или нет. Но вот как я должен это сделать, чтобы он работал во всех браузерах:

$(whatever).keypress(function (e) {

    var k = e.keyCode || e.which;
    if (k == 13) {
        return false; // !!!
    }
});
2 голосов
/ 05 октября 2010

jQuery нормализует это уже, вы можете просто сделать:

$(document).ready(function () {
    $("#input1").keydown(OnKeyDown);
});

function OnKeyDown(e) {
    if (e.which == 13) {        //e.which is also normalized
        alert('this will fail');
        return false;
    }
}

Когда вы делаете return false из обработчика, jQuery вызывает event.preventDefault() и event.stopPropgation() внутренне уже .Вы также можете сделать версию анонимной функции:

$(function () {
  $("#input1").keydown(function() {
    if (e.which == 13) return false;
  });
});
0 голосов
/ 25 марта 2013
        textBox.onkeydown = function (e) {
            e = e || window.event;
            if (e.keyCode == 13) {
                if (typeof (e.preventDefault) == 'function') e.preventDefault();
                if (typeof (e.stopPropagation) == 'function') e.stopPropagation();
                if (typeof (e.stopImmediatePropagation) == 'function') e.stopImmediatePropagation();
                e.cancelBubble = true;
                return false;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...