前提・実現したいこと
フォームに情報を複数入力してもらい、その入力された情報が正規表現を通った時だけ「送信」ボタンを押せるようにしたいです。
学習を始めて1週間前後なので、コードの書き方等については無駄な点などがあってもご容赦いただきたいです。
発生している問題・エラーメッセージ
こういった場合、if文の条件式の欄にどのように書けば良いのでしょうか?
あまり良いやり方だとは思わなかったのですが、各else後に、コールバック関数のスコープ外であらかじめ宣言した変数に文字列などを代入。
それを3つ一致させればtrueになるかな、と思ったのですが、イベントを起こした後に変数に代入した文字列が関数の外ではなかったことになるのか、ボタンが押せるようになりませんでした。
上記のような方法(間違っていますが)くらいしか思いつかなかったので、ヒントをいただきたいです。
該当のソースコード
<form id="form"> ユーザー名(半角英数):<input type="text" id="name" value="" style="width:200px;"><br> <p id="error1"></p><br> パスワード(半角英数):<input type="password" id="password1" value="" style="width:150px;"><br> <p id="error2"></p><br> パスワード(確認):<input type="password" id="password2" value="" style="width:150px;"><br> <p id="error3"></p><br> <input type="button" id="btn" value="送信"> </form> // 結果 var answer = document.getElementById('answer'); // エラーメッセージ var error = document.getElementById('error'); // ボタン 通常時は押せない var btn = document.getElementById('btn'); btn.disabled = true; var name1 = document.getElementById('name'); var password1 = document.getElementById('password1'); var password2 = document.getElementById('password2'); name1.addEventListener('focusout',function(){ if(!name1.value.match(/^([a-zA-Z0-9]{6,16})$/)){ error1.innerHTML = '正しくありません'; }else{ error1.innerHTML = ' '; } }, false); password1.addEventListener('focusout',function(){ if(!password1.value.match(/^([a-zA-Z0-9]{8,})$/)){ console.log(password1.value); error2.innerHTML = '正しくありません'; }else{ error2.innerHTML = ' '; } }, false); password2.addEventListener('focusout',function(){ if(!password2.value.match(/^([a-zA-Z0-9]{8,})$/)){ error3.innerHTML = '正しくありません'; }else{ error3.innerHTML = ' '; } }, false); if(){ btn.disabled = false; btn.addEventListener('click',function(){ answer.innerHTML = 'OK'; }, false); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/24 05:25
2021/04/24 07:39
退会済みユーザー
2021/04/24 08:17
2021/04/24 08:24
退会済みユーザー
2021/04/24 08:36
2021/04/24 08:43
退会済みユーザー
2021/04/24 11:06