Запретить отправку формы IE в делегате jQuery - PullRequest
3 голосов
/ 01 октября 2010

Я пытаюсь использовать функцию .delegate () jQuery, чтобы поймать нажатие кнопки отправки и предотвратить перезагрузку страницы.

Работает нормально во всех браузерах, которые я пробовал, , но Internet Explorer!

Позвольте мне объяснить в коде, у меня есть этот HTML, который динамически генерируется с помощью JS:

<form id='submit-form'>
  <input type='text' id='blah' />
  <input type='submit' id='blahbutton' />
</form>

Мой Javascript выглядит так:

$("body").delegate("#submit-form", "submit", function(event)
{
  // to logic here
  return false;
});

При наборе текста в текстовом поле и использовании кнопки «Enter» на клавиатуре выполняется JS-штраф, и страница остается без изменений.Но когда кнопка «Отправить» щелкается мышью, она перезагружает страницу и отправляет форму.

Как сделать так, чтобы нажатие кнопки выполняло ту же функцию, что и нажатие клавиши ввода на входе в Internet Explorer?

Ответы [ 5 ]

3 голосов
/ 03 октября 2010

Я понял.

Мое решение состояло в том, чтобы создать действия для и отправки формы, и нажатия кнопки отправки.

Итак:

  • Нажатие «Enter» в поле ввода вызвало действие отправки формы
  • Нажатие на кнопку «Отправить» вызвало действие нажатия кнопки

Это означает дублирование кода, но теперь он работает в IE и др.

2 голосов
/ 01 октября 2010

Одна вещь, которую вы могли бы рассмотреть, - использовать кнопку вместо отправки в качестве атрибута типа .

<button type="submit"></button>

То же, что

<input type="submit"></button>

Но если вы используете

<button type="button"></button> 

или

<input type="button"></button>

, тогда используйте что-то вроде:

$(function() {
    $("#buttonId").bind("click", function() {

        // ...do stuff

        //if all conditions are met

        $("formId").trigger("submit");
    });
});

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

Таким образом, вам не нужно использовать то, что, на мой взгляд, немного хакер, чтобы отменить (используя e.preventDefault (), вернуть false, что угодно ...) действие отправки формы, которое нене должен быть уволен в первую очередь.Отмена поведения по умолчанию может иногда приводить к странным и трудным отслеживанию побочных эффектов ... так почему бы не избежать необходимости делать это в первую очередь (если вы, конечно, можете)?

1 голос
/ 01 октября 2010

Длинный выстрел здесь, но у вас есть что-нибудь еще на этой странице с атрибутом id или name submit-form или blahbutton?Или глобальная переменная (например, свойство window)?Поскольку у IE есть проблемы с пространством имен (он объединяет вещи, которые он не должен ), и не раз я видел, что проблема такого странного характера решается, обнаруживая, что где-то есть что-то с name, которое имеет такоезначение.

Простой способ проверить это - временно дать форме и кнопке совершенно новые идентификаторы (например, flibbergibbet23 и ohmygodunicorns451) и посмотреть, исчезнет ли проблема.Если это так, то вы знаете, что это странный конфликт имен IE, и вы можете отправиться на поиски и уничтожения миссии ...

0 голосов
/ 01 октября 2010

не event.preventDefault() и event.stopPropagation() у вас не работает?

В качестве альтернативы должно работать и следующее:

    function myFunction()
    {
        if(...)
        {
           return true;
        }
        return false;
    }

Для

<form id="formId" action="#" onsubmit="return(myFunction())">
...
   <input type="submit" value="submit" />
</form>
0 голосов
/ 01 октября 2010

Попробуйте,

<form id='submit-form' onSubmit='return false;'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...