jQueryの$(form).submit(); formタグ内でonSubmitをトリガーしませんか?
質問
次のものがあります:
<script type="text/javascript">
function CancelFormButton(button) {
$(button.form).submit();
}
</script>
<form onsubmit="alert('here');">
<input type="button" value="Cancel" onClick="CancelFormButton(this);" />
</form>
<!> quot; Cancel <!> quotをクリックすると、ボタン、フォームタグからのonsubmitはトリガーされません。
代わりに、この行はフォームを正常に送信します:$(button.form).submit();
しかし、formタグのonsubmit内でalert('here');
をスキップします。
これは正しいですか、何か間違っていますか?
ところで、この場合、この機能が必要ですが、onsubmitがトリガーされるブラウザーで問題が発生するかどうか疑問に思っています。
解決
ごめんなさい、あなたの質問を誤解しました。
Javascript-form.submit()を呼び出すときにonsubmitをキャプチャする:
最近尋ねられた:<!> quot;なぜそうではない form.onsubmitイベントは、私が javascriptを使用してフォームを送信しますか?<!> quot;
答え:現在のブラウザは htmlのこの部分に準拠する 仕様。イベントは発生のみ ユーザーがアクティブにしたとき- によって起動されたときに起動しません コード。
(強調を追加)。
注: <!> quot;ユーザーによってアクティブ化<!> quot;送信ボタンを押すことも含まれます(おそらくEnterキーからのデフォルトの送信動作を含みますが、私はこれを試していません)。また、(コードを使用して)送信ボタンをクリックした場合にもトリガーされないと思います。
他のヒント
これ を回避すると、@ Cletusで見つかった問題が修正されます。
function submitForm(form) {
//get the form element's document to create the input control with
//(this way will work across windows in IE8)
var button = form.ownerDocument.createElement('input');
//make sure it can't be seen/disrupts layout (even momentarily)
button.style.display = 'none';
//make it such that it will invoke submit if clicked
button.type = 'submit';
//append it and click it
form.appendChild(button).click();
//if it was prevented, make sure we don't get a build up of buttons
form.removeChild(button);
}
最新のすべてのブラウザで動作します。
タブ/スポーンされた子ウィンドウで動作します(はい、IE <!> lt; 9でも)。
バニラです!
フォーム要素へのDOM参照を渡すだけで、すべてのアタッチされたリスナー、onsubmit、および(それによって妨げられない場合)最後にフォームを送信します。
私の簡単な解決策:
$("form").children('input[type="submit"]').click();
それは私の仕事です。
場合によっては、この動作が必要な場合もあると思いますが、フォーム送信をトリガーしないコードは(常に)デフォルトの動作であると主張します。
でフォームの送信をキャッチしたいとします$("form").submit(function(e){
e.preventDefault();
});
その後、入力に対して検証を行います。コードが送信ハンドラーをトリガーできる場合、含めることはできません
$("form").submit()
このハンドラー内では、無限ループが発生するため(SAMEハンドラーが呼び出され、送信を禁止し、検証し、再送信します)。同じハンドラーをトリガーすることなく、送信ハンドラー内でフォームを手動で送信できる必要があります。
これは質問に直接答えないことはわかっていますが、このページにはこの機能をハッキングする方法に関する他の多くの回答があり、これを指摘する必要があると感じました(そしてコメントするには長すぎます) )。
trigger( 'submit')は機能しません。beacuseonSubmitメソッドは起動しません。 次のコードは私のために機能します。このコードを使用するときはonSubmitメソッドを呼び出します:
$("form").find(':submit').click();
関数でtrigger()イベントを試してください:
$("form").trigger('submit'); // and then... do submit()
の代わりに
$("form").submit()
これを試してください
$("<input type='submit' id='btn_tmpSubmit'/>").css('display','none').appendTo('form');
$("#btn_tmpSubmit").click();
数年前にこの質問を見つけました。
最近<!> quot; rewrite <!> quot;を試みました。送信メソッド。以下は私のコードです
window.onload= function (){
for(var i= 0;i<document.forms.length;i++){
(function (p){
var form= document.forms[i];
var originFn= form.submit;
form.submit=function (){
//do something you like
alert("submitting "+form.id+" using submit method !");
originFn();
}
form.onsubmit= function (){
alert("submitting "+form.id+" with onsubmit event !");
}
})(i);
}
}
<form method="get" action="" id="form1">
<input type="submit" value="提交form1" />
<input type="button" name="" id="" value="button模拟提交1" onclick="document.forms[0].submit();" /></form>
IEでは実行しましたが、<!> quot; cletus <!> quot;と同じ理由で他のブラウザでは失敗しました
これを回避する最も簡単な解決策は、タイプsubmitおよびトリガークリックで「一時的な」入力を作成することです:
var submitInput = $("<input type='submit' />");
$("#aspnetForm").append(submitInput);
submitInput.trigger("click");