JavaScript возвращает false, не останавливая отправку формы - PullRequest
1 голос
/ 09 февраля 2011

У нас есть такой код, который работает некоторое время. Это для кнопки, которая отправляет HTML-форму, если соседнее текстовое поле не пусто. Я взял этот фрагмент прямо из нашего кода; Я изменил содержимое полей, но ничего не удалил.

<input 
    type="image" 
    name="inputName"    
    id="inputId" 
    src="someImage" 
    alt="altText"
    onclick="
        javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] : 
        document.getElementById(&quot;aTextInputFormFieldId&quot;); 
        if(obj.value.length == 0)
        {
            alert('It is 0!');
            return false;
        };" 
    style="someStyle" />

(Оригинальный код находится на одной строке, но для ясности добавлены разрывы строк).

Кажется, он отлично работает в Firefox. Но в IE это происходит не так, как я не могу понять: если поле ввода (aTextInputFormFieldId) пустое, оно выдает предупреждение, но затем отправляет форму в любом случае после того, как пользователь нажмет кнопку «ОК» в предупреждении.

Когда я сделал просмотр источника на всей странице и скопировал его локально, он, кажется, работает отлично; он либо отправляет форму, либо выдает предупреждение, а затем отказывается от отправки.

Моя лучшая текущая (но все еще паршивая) теория заключается в том, что одна из включенных библиотек JavaScript делает что-то смешное, что объясняет, почему это не сработало на реальном сайте, но дает сбой, когда я копирую его локально (поскольку я не брал различные библиотеки, которые он импортирует.) Это логично, и я проверю это, также взяв библиотеки, но мне трудно представить, что эти библиотеки могут делать, чтобы все испортить (или почему) .. они обычные служебные библиотеки, такие как jquery, служебные функции и т. д.

Так есть ли у кого-нибудь теория о том, что здесь может происходить?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Вы упомянули jQuery, jQuery может помешать вашей форме, если она что-то делает через обработчик submit() .Проверьте, не привязан ли jQuery.submit() к вашей форме.

Обычно при работе с чистым javascript недостаточно вернуть false.В зависимости от того, чего вы хотите достичь, вы можете посмотреть на preventDefault или stopPropagation

При работе с Internet Explorer помните, что объект событияне передается в функцию, но вместо этого находится в window.event.

Обновление Internet Explorer может потребовать, чтобы вы вместо этого использовали event.returnValue = false;.В вашем случае это будет window.event.returnValue = false; при таргетинге на IE.

Удачи

0 голосов
/ 10 февраля 2011

Ссылки протокола Javascript должны состоять из одной строки, т.е.нет новых строк.

onclick="javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] :document.getElementById(&quot;aTextInputFormFieldId&quot;); if(obj.value.length == 0){alert('It is 0!');       return false;};" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...