onsubmit = "return false" не влияет на Internet Explorer 7/8 (форма все еще отправлена) - PullRequest
8 голосов
/ 02 ноября 2010

У меня есть форма, которая будет отправлена ​​с помощью кода javascript, запущенного в «onsubmit» тега. Прекрасно работает во всех браузерах, но не в IE7 / IE8.

Что я могу сделать?

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
  [...]
  <input type="submit" value="Go">
</form>

Ответы [ 14 ]

11 голосов
/ 02 ноября 2010

Я собираюсь придираться к этому. Если вы хотите обрабатывать отправку формы, то для этого и нужна отправка. Если пользователь нажмет ввод в одном из ваших полей, ваш обработчик onclick будет полностью исключен. Вот основной пример того, как сделать это ненавязчивым способом.

<form name="myform">
  <input type="submit" />
</form>
<script>
  document.myform.onsubmit = function(){
    alert('handled');
    return false;
  }
</script>

Это можно сделать намного проще с помощью jQuery, такой же формы ...

$("form[name=myform]").bind('submit',function(){
   alert('handled');
   return false;
});
6 голосов
/ 22 октября 2015

Несколько идей, предложенных здесь, работают (потому что они используют разные способы написания правильного кода), но есть гораздо более простой ответ

OP пишет:

onsubmit="submitmyform();"

вместо:

onsubmit="return submitmyform();"

Вот и все.

3 голосов
/ 16 июля 2012

Я не думаю, что ваше возвращаемое ложное значение когда-либо достигнуто, поскольку оно приходит после того, что возвращено из вашей функции.

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">

Убедитесь, что вы возвращаете ложное значение внутри своей функции submitmyform (), иначе, если это не так, он может возвращать true для вас из события obsubmit.

2 голосов
/ 08 ноября 2013

попробуйте это.работа для меня.

onSubmit = "javascript: return false"

2 голосов
/ 06 апреля 2012
<script type="text/javascript">
<!--

function submitHandler()
{
  alert(0);
  return false;
}

window.onload=function(){document.getElementById("formid").attachEvent("onsubmit", submitHandler);}
-->
</script>

<form action="/dosomething.htm" method="GET" id="formid">
  [...]
  <input type="submit" value="Go">
</form>

Метод события присоединения работает только для IE7 / 8.Если вы хотите надежное кросс-браузерное решение, вы должны использовать в качестве альтернативы addEventListener.

Надеюсь, это поможет

1 голос
/ 18 октября 2013

Чтобы отменить событие в устаревшем IE, вам нужно установить returnValue в false. Простое возвращение false не сделает этого. Я не знаю, почему Microsoft реализовала это таким образом.

function validateForm(evt) {
//  if form is not valid
    if(!condition) {
    //  if evt has preventDefault
        if(evt.preventDefault)
            { event.preventDefault(); }
    //  if evt has returnValue
        else if(evt.returnValue)
            { evt.returnValue = false; }
    //  fallback
        else
            { return false; }
    }
}

//  assume form is reference to your form
form.attachEvent('onsubmit',validateForm);
0 голосов
/ 05 сентября 2014
document.forms.userFormRegisterr.onsubmit =  function(e){
    return false;
};
0 голосов
/ 22 сентября 2013
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)">
     [...]
     <input type="submit" value="Go">
   </form>

это работает нормально ... функция должна возвращать true или false

0 голосов
/ 25 июня 2013

У меня была такая же ошибка, и когда я включал консоль, она никогда не появлялась.Итак, я понял, что это была консоль, которая не была известна интернет-обозревателю, пока она отключена.Просто добавьте в окно фиктивную консоль со следующим кодом (если его еще нет):

var myconsole = {log : function(param){}}
window.console = window.console || myconsole;

С этим вы можете столкнуться с проблемами, если вы хотите иметь консоль javascript для Microsoft.Тогда просто закомментируйте строки.Но теперь консольный объект больше не является неопределенным на всем сайте.

0 голосов
/ 24 июля 2012

На самом деле, потому что вы пишете submitmyform();return false, оценивается только submitmyform.

В случае двух команд вам придется поместить их в фигурные скобки, как это

{submitmyform();return false;}

так что оба оцениваются.

...