Кнопка ввода не отправляет форму (ТОЛЬКО IE) ASP.NET

У меня есть форма с текстовым полем и кнопкой. IE - единственный браузер, который не отправляет форму при нажатии Enter (работает в FF, Opera, Safari, Chrome и т. д.). Я нашел эту функцию javascript, чтобы попытаться заставить IE вести себя; но безрезультатно:

function checkEnter(e){
    var characterCode
    if (e && e.which) {
        e = e
        characterCode = e.which
    } else {
        e = event
        characterCode = e.keyCode
    }
    if (characterCode == 13) {
        document.forms[0].submit()
        return false
    } else {
        return true
    }
}

Выполнение:

searchbox.Attributes("OnKeyUp") = "checkEnter(event)"

Любой совет?

Обновлено:Эта страница на CodeProject очерчивает то, что говорила Дилли, и работает отлично.

Итак, в вашей форме вообще нет кнопок?

James 07.11.2008 01:23

Извините, у него тоже есть кнопка. Спасибо что подметил это.

Anders 10.11.2008 16:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
2
17 224
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

// Use the following Javascript in your HTML view
// put it somewhere between <head> and </head>

    <script language = "JavaScript" type = "text/javascript"><!--
    function KeyDownHandler(btn)
    {
      if (event.keyCode == 13)
      {
        event.returnValue=false;
        event.cancel = true;
        btn.click();
      }
    }
    // -->
    </script>

    // Put this in your TextBox(es) aka inside <asp:textbox ... >
    onkeydown = "KeyDownHandler(ButtonID)"

Спасибо за ввод, однако он выдает прекрасную ошибку «Объект не поддерживает это свойство или метод» :(

Anders 07.11.2008 01:12

Использует ли он GET вместо POST? URL-адрес слишком длинный? Я видел это ...

Ответ принят как подходящий

Другая вещь, которую я делал в прошлом, - это обертывание области формы в Panel и установка атрибута DefaultButton на имеющуюся у вас кнопку отправки. Это эффективно сопоставляет ключ ввода с отправкой, пока у вас есть элемент формы в фокусе в области панели.

Нет, не будет (ответил на мой вопрос). Это сработало, спасибо! : D

Anders 07.11.2008 01:21

Рад, что это сработало. Хорошая оговорка в этом отношении заключается в том, что если у вас есть несколько форм на странице (например, различные варианты поиска), вы можете обернуть панель вокруг каждой из них, и тогда соответствующая кнопка отправки будет правильно «сопоставлена».

Dillie-O 07.11.2008 01:33

это решение создает функцию javascript. Есть ли способ решить эту проблему, чтобы она была доступна?

skyfoot 20.08.2009 14:48

Как правило, для формы требуется кнопка input type = "submit" или input type = "image", чтобы встроенное поведение могло отправлять форму при входе. Для его отправки вам не нужен javascript.

Просто создайте текстовый ввод в скрытом div на странице. Это позволит обойти ошибку IE.

Пример div:

    <!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") -->
    <div style = "display:none">
            <input type = "text" name = "hiddenText"/>
    </div>

При использовании display:none IE не увидит кнопку и, следовательно, не сможет использовать ее для отправки формы. Вместо этого вы можете использовать z-index и абсолютное позиционирование, чтобы скрыть его под другим элементом, например. со стилем:

position:absolute; bottom: -20px; left: -20px; z-index: -1;

Теперь он все еще будет там, доступный для IE, но спрятанный под другим элементом.

Здесь есть хорошее описание этой проблемы и хорошее решение на основе jquery:

http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

Это связано с особенностями IE для ввода одного текстового поля.

Простое решение - запретить странице иметь одно текстовое поле, добавив еще одно скрытое.

<input type = "text" name = "hidden" style = "visibility:hidden;display:none;" />

видеть.. http://www.4guysfromrolla.com/articles/060805-1.aspx

Скрыть кнопку - без использования display: none, но со следующими стилями:

position: absolute; /* no longer takes up layout space */
visibility: hidden; /* no longer clickable / visible */

Если вы это сделаете, вам не нужно будет добавлять какие-либо другие элементы или скрытые поля ввода.

Другие вопросы по теме