これが失敗する理由はいくつかあります。
最初に遭遇するのは、を呼び出すときに引数を渡さないためnotEmpty
、変数elem
はになりますundefined
。プロパティ()にアクセスしようとするとvalue
、例外がスローされ、関数が停止します。
これを上から見ていきましょう。
まず、より新しい方法を使用してイベントハンドラーを適用します。
処理するフォームを識別する手段を提供します。id属性は一般的な選択として適切です(ただし、私よりも意味のある名前を使用してください)。
<form id="myForm"
method="get"
action="http://www.censoredgaming.co.uk/cgi-bin/mailer.pl">
次に、DOM内のフォームへの参照を取得し、それにイベントリスナーを追加します。
document.getElementById('myForm').addEventListener('submit', notEmpty);
フォームがDOMに追加された後で、これを行う必要があることに注意してください。これを実現する最も簡単な方法は、<script>
後を配置することです</form>
(直前</body>
が人気の場所です)。DOMの準備ができたとき、またはドキュメントがロードされたときに起動するイベントハンドラーを使用することもできます。
古いバージョンのInternetExplorerはサポートしていません。サポートaddEventListerner
したい場合は、互換性ルーチンがあるMDNドキュメントを参照してください。
次に、notEmpty
関数を更新します。これはイベントハンドラーであるため、1つの引数(イベントオブジェクト)を取得します。また、バインドされている要素(フォーム)のコンテキストで呼び出されます。
function notEmpty(event) {
var aForm = this;
}
ある要素が特定の長さの値を持っていることを確認したいのですが、質問にそのような要素の兆候はありません。この例で作業してみましょう:
<label> Some data <input name="example"></label>
フォームの要素コレクションから要素を参照できます。
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
}
これで、テストを追加できます。
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
if (input.length >= 2) {
} else {
}
}
フォームを送信したくない場合は、イベントに対するデフォルトのアクションを禁止します。
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
if (input.length >= 2) {
// At least two characters, all is well
} else {
alert("An error");
input.focus();
event.preventDefault();
}
}