私は独自のフォーム検証javascriptライブラリを作成し、送信ボタンがクリックされたかどうかを検出する方法をgoogleで探していましたが、HTMLのonSubmit="function()"
でonClickを使用する必要があるコードのみが見つかりました。
OnSubmitやonClick javascriptを追加するなどのhtmlコードに触れる必要がないように、このjavascriptを作成したいと思います。
Derek's answer を参照してください。これは、現在受け入れられている答えです。これには、この答えに含まれていたものすべてが含まれています。
(デレクがライブラリの例を含めるように更新した後、この回答を削除しようとしましたが、緑色のチェックマークが付いているので、SOは許可しません)
なぜjQueryが必要でないときにいつも人々が使うのですか?
単純なJavaScriptを使用できないのはなぜですか?
var ele = /*Your Form Element*/;
if(ele.addEventListener){
ele.addEventListener("submit", callback, false); //Modern browsers
}else if(ele.attachEvent){
ele.attachEvent('onsubmit', callback); //Old IE
}
callback
は、フォームが送信されるときに呼び出す関数です。
EventTarget.addEventListener
については、 MDNに関するこのドキュメント をご覧ください。
ネイティブsubmit
イベントをキャンセルするには(フォームが送信されないようにするには)、コールバック関数で .preventDefault()
を使用します。
document.querySelector("#myForm").addEventListener("submit", function(e){
if(!isValid){
e.preventDefault(); //stop form from submitting
}
});
submit
イベントをリッスンする何らかの理由でライブラリが必要であると判断した場合(すでに使用している、またはクロスブラウザの問題に対処したくない場合)、一般的なライブラリで送信イベントをリッスンする方法のリストを次に示します。
jQuery
$(ele).submit(callback);
ここで、ele
はフォーム要素の参照であり、callback
はコールバック関数の参照です。 参照
<iframe width="100%" height="100%" src="http://jsfiddle.net/DerekL/wnbo1hq0/show" frameborder="0"></iframe>
AngularJS(1.x)
<form ng-submit="callback()">
$scope.callback = function(){ /*...*/ };
ここで、$scope
は、 controller 内のフレームワークによって提供されるスコープです。 参照
React
<form onSubmit={this.handleSubmit}>
class YourComponent extends Component {
// stuff
handleSubmit(event) {
// do whatever you need here
// if you need to stop the submit event and
// perform/dispatch your own actions
event.preventDefault();
}
// more stuff
}
ハンドラをonSubmit
propに渡すだけです。 参照
その他のフレームワーク/ライブラリ
フレームワークのドキュメントを参照してください。
JavaScriptでいつでも検証を行うことができますが、HTML5にはネイティブ検証もあります。
<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">
JavaScriptも必要ありません!ネイティブ検証がサポートされていない場合はいつでも、JavaScriptバリデーターにフォールバックできます。
これは、onSubmit
が発生したときに独自のJavaScript関数を呼び出すことができる最も簡単な方法です。
HTML
<form>
<input type="text" name="name">
<input type="submit" name="submit">
</form>
JavaScript
window.onload = function() {
var form = document.querySelector("form");
form.onsubmit = submitted.bind(form);
}
function submitted(event) {
event.preventDefault();
}
要件に基づいて、jQueryのようなライブラリなしで以下を実行することもできます。
これを頭に追加します。
window.onload = function () {
document.getElementById("frmSubmit").onsubmit = function onSubmit(form) {
var isValid = true;
//validate your elems here
isValid = false;
if (!isValid) {
alert("Please check your fields!");
return false;
}
else {
//you are good to go
return true;
}
}
}
そして、フォームはまだ次のように見えるかもしれません:
<form id="frmSubmit" action="/Submit">
<input type="submit" value="Submit" />
</form>