web-dev-qa-db-ja.com

onsubmit = "return false"は、Internet Explorer 7/8には影響しません(フォームは引き続き送信されます)

タグの「onsubmit」でトリガーされるJavaScriptコードによって送信されるフォームがあります。すべてのブラウザで正常に動作しますが、IE7/IE8では動作しません。

私に何ができる?

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

私はこれをつまむつもりです。フォームの送信を処理する場合は、それが送信の目的です。ユーザーがフィールドの1つにEnterキーを押すと、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;
});
11
Drew

ここで提案されているいくつかのアイデアは機能しますが(正しいコードを書くためにさまざまな方法を使用しているため)、はるかに簡単な答えがあります

OPは書いた:

onsubmit="submitmyform();"

の代わりに :

onsubmit="return submitmyform();"

それでおしまい。

6
Thibault Witzig

関数から返されたものの後に来るので、falseが返されることはないと思います。

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

'submitmyform()'関数内でfalseを返すことを確認してください。そうでない場合は、フォームobsubmitイベントにtrueを返す可能性があります。

3
Ally

これを試して。私のために働く。

onSubmit = "javascript:return false"

2
Husnu Setiawan
<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を使用する必要があります。

それが役に立てば幸い

2
Sergiu

従来のIEでイベントをキャンセルするには、returnValuefalseに設定する必要があります。 falseを返すだけではうまくいきません。マイクロソフトがなぜこのように実装したのかわかりません。

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);
1
Dissident Rage
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)">
     [...]
     <input type="submit" value="Go">
   </form>

これは正常に機能します...関数はtrueまたはfalseを返す必要があります

0
Atiqur

同じエラーが発生しましたが、コンソールをオンにしても問題は発生しませんでした。それで私は、それがオフになっている限り、InternetExplorerによって知られていないのはコンソールであると理解しました。次のコードを使用して、ダミーコンソールをウィンドウに追加するだけです(まだない場合)。

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

これを使用すると、MicrosoftのJavaScriptコンソールが必要な場合に問題が発生する可能性があります。次に、行をコメントアウトします。しかし現在、コンソールオブジェクトはサイト全体で未定義ではありません。

0
redestructa

私たちの解決策は、javascriptイベントをフォームの「onsubmit」から送信ボタンの「onclick」に移動することでした。

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