1

送信イベントリスナーがアタッチされた動的に作成されたフォームがあるため、データを保存するために ajax リクエストを実行できます。

でも、集中力を失ったときにも提出したいです。

呼び出しを行いますform.submit()が、以前に作成したイベント リスナーは無視されます。

form.addEventListener('submit', function (event_handler) {
    event_handler.preventDefault();
    /* some code */
});

// if loses focus
form.addEventListener('blur', function (event) {
   form.submit(); // submits, but ignores the defined eventListener so the preventDefault() is ignored.
   return false;
}, true);

form.submit() が送信リスナー内で定義されたコードを実行することを期待していました。

これを回避する方法はあります。

jQuery やその他のフレームワークはありません。ただのバニラjs。

4

1 に答える 1

2

確かに問題があります。JavaScript の form.submit() を呼び出すと、イベント リスナーがオーバーライドされることがあります。簡単な解決策は、サブミッター関数を呼び出して呼び出すだけです。

 function runBeforeSubmit()
 {
     /* some code */
 }


 form.addEventListener('submit', function (event_handler) {
    event_handler.preventDefault();
    runBeforeSubmit(); <------------------------ shared code to process before submit
 });

 // if loses focus
 form.addEventListener('blur', function (event) {
   runBeforeSubmit(); <------------------------ shared code to process before submit
   form.submit();
   return false;
}, true);
于 2013-05-19T15:59:10.737 に答える