2017-08-03 7 views
0

私は古い学校のサイトでフォームに検証を追加しています(<form onsubmit="return validate_me();">)。しかし、私はそれをテストしている間、JavaScriptの例外がスローされ、イベントが継続し、私のテストデータを変更しました。これが製造現場で発生した場合、大量のデータが誤って消去される可能性があります。JavaScript例外後のHTMLオンイベントの動作

例外がスローされたときにイベントが妨げられないように正しく動作していますか?私は、明示的なtrueがイベントを継続するために返される必要があると仮定していました。未処理の例外の後にイベントを続行しない方法はありますか?

+0

私はあなたのハンドラの実行が後に停止する必要がありますので、あなたは、イベントの伝播について話していると仮定します私たちが質問を書き直すと、未処理の例外*の後にイベントの[伝播を止める]方法があるかどうか、答えはいいえです。しかし、**扱われた**例外の後にイベントの伝播を止めることができます(イベントの種類にもよるが): 'catch(err){evt.preventDefault(); evt.stopPropagation();} ' – Kaiido

+0

@Kaiidoこれは、彼がハンドラに' event'オブジェクトを渡す場合にのみ機能します。彼は '

'を定義し、ハンドラを 'function validate_me(evt)'として定義しなければならないでしょう。そうしないと、しようとすると定義されていない参照エラーが発生します'evt'にアクセスしてください –

+0

@MicahHunsbergerはい、明らかに、私はあなたの意見は表示されません。しかし、イベント属性を使用するのは正しい方法ではなく、複数のハンドラがあるようだから、彼はすべてのイベントをイベント属性で設定していないと思います。 – Kaiido

答えて

1

validate_me()関数から明示的なfalseが返されない限り、フォームは送信されます。

trycatchブロックにあなたの全体のvalidate_me機能をラップし、任意のJavaScriptエラーが発生した場合のようなプロセスでfalseを返すこの

function validate_me(){ 
    try{ 
     //do some stuff 
    } catch(err){ 
     console.log(err); 
     return false; 
    } 
} 
関連する問題