2011-02-09 2 views
1

У нас есть такой код, который работает некоторое время. Это кнопка, которая отправляет html-форму, если только рядом текстовое поле пусто. Я взял этот фрагмент непосредственно из нашего кода; Я изменил содержимое полей, но ничего не удалил.JavaScript return false not stopping form submission

<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, служебные функции и т. д.

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

+0

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

+1

'document.all' ?! Почему вы обслуживаете IE 4? – Quentin

+0

@Scott: это моя мысль и то, что я делаю сейчас ... но мне сложно описать, почему будет библиотека, которая каким-то образом перехватывает это, позволяя предупреждению пройти, но отменяя возврат false , Но, возможно, что-то еще происходит ... (очевидно, я пропускаю * что-то * ...) – Beska

ответ

3

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

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

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

Update Интернет исследователь может понадобиться использовать event.returnValue = false; вместо. В вашем случае это будет window.event.returnValue = false; при настройке IE.

Успехов

+0

ftr, у меня была такая же проблема в хроме. это кажется странным и грязным, потому что я всегда возвращал true/false, но установка event.returnValue заставляло его работать должным образом. BLEH. – viggity

0

Ссылки на протокол 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;};" 
+0

Извините ... это ... Я просто переформатировал его, чтобы он был смутно читаемым на сайте. Я сделаю это ясно в вопросе. – Beska

+0

Ну, это не протокол javascript. Строка в onclick анализируется как функция, а javascript: просто считается меткой. Если это свойство href ссылки, вы wold должны быть правильными –