JSを呼び出すことで直接送信されたフォームメソッドの場合、送信イベントは応答しません。なぜ?ご存知の場合は、返信してください。類推のために、input.select()を使用してテストしましたが、Selectイベントに応答することができました。この理由を脇に置いてみましょう。最初に現在の問題を解決する方法を見てみましょう。
イベントに応答しないコードの例:
<form id = form1 action = http://www.jb51com> </form>
<script type = text/javascript>
var form = document.getElementById( 'form1');
form.onubmit = function(){
アラート(1);
};
form.submit();
</script>
実際の操作では、アラートは発表されません。
送信方法を使用してフォームを送信することは、目立たないJavaScriptの原則に違反していますが、時にはそれを使用する必要があります。たとえば、アイテムを選択した後、JSを使用して検索フォームを送信する必要があります。
2。問題分析イベント自体は応答しないため、これらのイベントを手動でトリガーすることのみが可能です。マニュアルトリガープランを決定する前に、イベントの登録方法を確認しましょう。
2つの元の登録方法があります。コードの例を参照してください。
<form id = form1 action = https://www.vevb.com onsubmit = alert(1)> </form> <form id = form1 action = https://www.vevb.com> </form>
<script type = text/javascript>
document.getElementById( 'form1')。onsubmit = function(){
アラート(1);
}
</script>
このような登録イベントは、OnSubmitを形成する方法を追加します。したがって、この方法を直接実行することができます。これは、イベントを手動でトリガーするのと同等です。
コードの例を参照してください:
<script type = text/javascript>
form.onubmit();
</script>
これはあなたにアラートを与えます。
ただし、Advanced Dom2標準登録方法およびIE登録方法Atacheventは、すでに非常に一般的に使用されています。これらの登録方法には、OnSubmitメソッドは存在しません。 form.onsubmit()が使用される場合、エラーが直接報告されます。
3。解決策もちろん、高度な登録方法自体は、イベントを手動でトリガーするソリューションも提供しますが、DOM2標準とIEのさまざまなプログラムを作成するだけです。さらに、このプログラムは元の登録方法にも効果的です。コードの例を参照してください:
<script type = text/javascript>
// IE火災イベント
if(form.fireevent){
form.fireevent( 'onsubmit');
form.submit();
// dom2火災イベント
} else if(document.createevent){
var ev = document.createevent( 'htmlevents');
ev.initevent( 'submit'、false、true);
form.dispatchevent(ev);
}
</script>
4。コードの概要ここで詳細はもう説明しません。それに慣れていない友人は、関連情報を自分で確認してください。コード全体をまとめてみましょう:
<!doctype html public - // w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd>
<html>
<head>
<メタhttp-equiv = content-type content = text/html; charset = gbk>
<Title>送信</title>
<スクリプトタイプ= text/javascript src = http://k.kbcdn.com/js/yui/build/utilities/utilities.js> </script>
</head>
<body>
<form id = form1 action = https://www.vevb.com> </form>
<script type = text/javascript>
var form = document.getElementById( 'form1');
// YUIレジスタイベント
yahoo.util.event.on( 'form1'、 'submit'、function(){
アラート( 'yui');
});
// dom0レジスタイベント
form.onubmit = function(){
アラート(1);
};
// DOM2レジスタイベント
if(form.addeventlistener){
form.addeventlistener( 'submit'、function(){
アラート(2);
}、 間違い);
// IE登録イベント
} else if(form.attachevent){
form.attachevent( 'onsubmit'、function(){
アラート(2);
});
}
// IE火災イベント
if(form.fireevent){
form.fireevent( 'onsubmit');
form.submit();
// dom2火災イベント
} else if(document.createevent){
var ev = document.createevent( 'htmlevents');
ev.initevent( 'submit'、false、true);
form.dispatchevent(ev);
}
</script>
</body>
</html>
ラン全体に小さな問題があります。 FXでは、form.submit()は必要ありません。フォームを直接送信したので、この文も保存されます。理由がわかっている場合は返信してください。
このデモは、IE6/IE7/FXでテストされました。