にN回をクリックした後、N回現れます)、アラートボックスは1回だけ表示されます。 Register
を再度押すと、アラートボックスが2回表示されます。どうしたの?警告ボックスは、この機能を考えると、ボタンを提出
required
属性がSafariで機能しないため、カスタムJavaScript関数を使用してフォームの検証を行っています。
ありがとうございます。
にN回をクリックした後、N回現れます)、アラートボックスは1回だけ表示されます。 Register
を再度押すと、アラートボックスが2回表示されます。どうしたの?警告ボックスは、この機能を考えると、ボタンを提出
required
属性がSafariで機能しないため、カスタムJavaScript関数を使用してフォームの検証を行っています。
ありがとうございます。
あなたのヒットサブミットボタン、つまりvalidate
が機能するたびに、いつでもイベントリスナーを送信してください。これを処理するには2つの方法があります。登録するには、一度だけ登録するか、追加したリスナーを最初に削除して追加します。
最初の方法
function validate() {
var elements = ["firstname", "lastname", "password", "favfood", "favsport"];
document.getElementById('register').noValidate = true;
document.getElementById('register').addEventListener('submit', function(event) {
for (var i = 0; i < elements.length; i++) {
if(document.getElementById(elements[i]).hasAttribute("required")) {
if(!document.getElementById(elements[i]).checkValidity()) {
event.preventDefault();
alert('Please, fill in every required field of the form.');
break;
}
}
}
}, false);
}
validate(); // call this function directly and remove it from your submit button
第二の方法
function validateCallback(event) {
var elements = ["firstname", "lastname", "password", "favfood", "favsport"];
for (var i = 0; i < elements.length; i++) {
if(document.getElementById(elements[i]).hasAttribute("required")) {
if(!document.getElementById(elements[i]).checkValidity()) {
event.preventDefault();
alert('Please, fill in every required field of the form.');
break;
}
}
}
}
function validate() {
document.getElementById('register').noValidate = true;
document.getElementById('register').removeEventListener('submit', validateCallback, false);
document.getElementById('register').addEventListener('submit', validateCallback, false);
}
、あなたが現在使用しているのと同じそれを使用しています。
編集:私はばかだ。私はあなたの例を正しくコピーしませんでした。すべてが魅力のように機能します。ありがとうございました。 – sgrontflix
ボタンを初めてクリックすると無効にすることができます。 – Deep
できません。目標は、 'required'要素が設定されていない場合に警告メッセージを表示することです。ワンクリック後に送信ボタンを無効にすると、ページをリロードしない限りユーザーはそれ以上クリックできなくなります。 – sgrontflix