тип ввода текста и onKeyDown не работает под IE - PullRequest
0 голосов
/ 05 апреля 2010

Я пишу WWW-приложение, оно должно работать под IE. У меня проблема с кодом, который работает под FF, но я не могу запустить его под IE.

// JS код

function test()
{
    if (window.event.keyCode == 13)
        window.location.assign("myPage.php");
}

Я пробовал несколько похожих способов работы с window.location и location.href, а также document.location. Я читал, что IE имеет проблемы с этим, поэтому я прошу решение.

Цель состоит в том, чтобы страница перезагружалась после ввода некоторого текста в <input type='text' name='item_code' onKeyDown='test()'> и нажатия клавиши ввода. Таким образом, результат аналогичен нажатию кнопки отправки типа под вводом текста.

В IE он перезагружает ту же страницу, и ничего не происходит. В ФФ это правильно работает.

ОБНОВЛЕНИЕ 1:

Пробное решение, данное Бобинсом.

<input type='text' name='item_code'>

<script type='text/javascript' >

document.getElementsByName('item_code')[0].onkeydown = function(event)
{
    if (event == undefined) { event = window.event; }
    if (event.keyCode == 13) { window.location = 'myPage.php'; }

    alert('1');
}

</script>";

Проблема в том, что если есть строка alert('1');, страница показывает предупреждение и перенаправления, если нет строки alert('1');, страница просто перезагружается. Я не знаю, в чем здесь проблема?

ОБНОВЛЕНИЕ 2:

Я вставляю то, что, в конце концов, работает для меня.

<form action='mainPage.php' method='POST'>
    <input type='text' name='item_code'>
</form>

<script type='text/javascript' >
    document.getElementsByName('item_code')[0].onkeydown= function(event)
    {
        if (event == undefined)
        {    
            event = window.event;
        }

        if (event.keyCode == 13)
        {
            var js_item_code = document.getElementsByName('item_code')[0].value;
            window.location = 'myPage.php?item_code='+js_item_code;
            return false;
        }
    };
</script>

Ответы [ 5 ]

5 голосов
/ 05 апреля 2010

Это странно, потому что использование window.event должно гарантировать, что ваша функция только всегда работает в IE. Это, конечно, то, что происходит со мной, когда я пробую ваш код. Я подозреваю, что ты больше не показываешь нам.

Обычный способ обработки событий кросс-браузерным способом с помощью встроенных атрибутов обработчика событий:

<input type="text" name="item_code" onkeydown="test(event)">

function test(event) {
    if (event.keyCode===13)
        window.location.href= 'myPage.php';
}

Это работает, потому что event в атрибуте относится к глобальному window.event в IE, где в любом другом браузере он ссылается на локальный аргумент с именем event, переданный в функцию атрибута обработчика события.

Однако обычно считается, что лучше избегать атрибутов обработчика событий и назначать обработчики из самого JavaScript. В этом случае вам нужна проверка, чтобы увидеть, что использовать:

<input type="text" name="item_code">

// in a script block after the input, or in document-ready code
//
document.getElementsByName('item_code')[0].onkeydown= function(event) {
    if (event===undefined) event= window.event; // fix IE
    if (event.keyCode===13)
        window.location.href= 'myPage.php';
};

В общем, я бы только пытался перехватить нажатия клавиш Enter, чтобы воспроизвести / изменить поведение отправки формы по умолчанию как последнее средство; лучше, если вы сможете разрешить отправку формы туда, куда вы хотите ее отправить.

0 голосов
/ 24 июня 2015

Есть способ заставить его работать без использования тега <form> в вашем HTML-коде.

Это самое простое решение, которое я нашел, которое работает как минимум с IE, Chrome и Firefox:

$(function() {
  $("input#q").on('keydown', function(event) {
    if (event.which == 13) {
      document.location.assign("page.aspx?q=" + $("#q").val());
      return false;
    }
  });
});
<input name="q" type="text" />
0 голосов
/ 05 апреля 2013

jQuery fix

document.onkeydown = function (e) {
    var event = jQuery.event.fix(e || window.event);
    var keycode = event.which;
    var isControl = event.ctrlKey;
}
0 голосов
/ 05 апреля 2010

Должно работать в общем. Возможно, вы столкнулись с двумя потенциальными проблемами:

  1. IE, как известно, делает странные вещи при использовании относительных ссылок в location.href. Вы пытались вставить что-то вроде http://stackoverflow.com там?
  2. Настройки безопасности в IE могут помешать правильной работе, если вы тестируете локальный файл, а не веб-сервер.
0 голосов
/ 05 апреля 2010

попробуйте это. у меня это сработало раньше.

 <input type="text" onKeyPress="KeyCheck"/>

 function KeyCheck(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;
    if (KeyID == 13 ) {
       alert('key pressed!!);
    }
  }
...