タグの「onsubmit」でトリガーされるJavaScriptコードによって送信されるフォームがあります。すべてのブラウザで正常に動作しますが、IE7/IE8では動作しません。
私に何ができる?
<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
[...]
<input type="submit" value="Go">
</form>
私はこれをつまむつもりです。フォームの送信を処理する場合は、それが送信の目的です。ユーザーがフィールドの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;
});
ここで提案されているいくつかのアイデアは機能しますが(正しいコードを書くためにさまざまな方法を使用しているため)、はるかに簡単な答えがあります
OPは書いた:
onsubmit="submitmyform();"
の代わりに :
onsubmit="return submitmyform();"
それでおしまい。
関数から返されたものの後に来るので、falseが返されることはないと思います。
<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false">
'submitmyform()'関数内でfalseを返すことを確認してください。そうでない場合は、フォームobsubmitイベントにtrueを返す可能性があります。
これを試して。私のために働く。
onSubmit = "javascript:return false"
<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を使用する必要があります。
それが役に立てば幸い
従来のIEでイベントをキャンセルするには、returnValue
をfalse
に設定する必要があります。 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);
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)">
[...]
<input type="submit" value="Go">
</form>
これは正常に機能します...関数はtrueまたはfalseを返す必要があります
同じエラーが発生しましたが、コンソールをオンにしても問題は発生しませんでした。それで私は、それがオフになっている限り、InternetExplorerによって知られていないのはコンソールであると理解しました。次のコードを使用して、ダミーコンソールをウィンドウに追加するだけです(まだない場合)。
var myconsole = {log : function(param){}}
window.console = window.console || myconsole;
これを使用すると、MicrosoftのJavaScriptコンソールが必要な場合に問題が発生する可能性があります。次に、行をコメントアウトします。しかし現在、コンソールオブジェクトはサイト全体で未定義ではありません。
私たちの解決策は、javascriptイベントをフォームの「onsubmit」から送信ボタンの「onclick」に移動することでした。
<form action="/dosomething.htm" method="GET">
[...]
<input type="submit" value="Go" onclick="submitmyform();return false">
</form>