質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

2909閲覧

JSで入力フォームの入力チェック

jinseinariyuki

総合スコア10

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/04/10 02:19

編集2018/04/10 03:15

javascriptを使って入力フォームの空白チェックがうまく出来ません。
あらかじめ、display ="none"されて非表示の見えない「送信ボタン」があって。
名前とメールの入力フォームの両方が入力がされたら「送信ボタン」が表示され送信可能状態になるように
プログラムを組みたいのですがうまく組むことが出来ません。
そもそも、フォームのチェックについて理解が出来ていなくてonclickなのかonchangeでやるべきか
別の方法を考えるべきなのか整理が出来ていません。
色々、駄目なところがありますが、よろしくお願いします。
~補足追記~
実際は、<input type="submit" value="送信" />送信フォームから何かを送信するわけではなく
ボタンのenabled/disabledの説明のために設置をしています。

実際に送信するのは、Stripeと言う決済機能の送信ボタンで
Stripeのボタンのenabled/disabledを制御したいのが今回の目的です。
よろしくお願いします。

※この質問自体が変なプログラムで、JSが切れられたら、送信ボタンが見えるから意味ないよね?と思われるかもしれませんが。

<form action="result.html" name="form1"> 氏名(必須)  :<input name="input01" size="20" type="text" required /> メール(必須):<input name="input02" size="20" type="text" required /> <div id="test1"> <input type="submit" value="送信" /> </div> <input type="submit" value="送信" onclick="checkForm1()"/> </form> <script> document.getElementById("test1").style.display ="none"; function checkForm1(){ if(document.form01.input01.value == "" || document.form01.input02.value == ""){ document.getElementById("test1").style.display ="none"; }else{ document.getElementById("test1").style.display ="block"; } } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/04/10 02:20

プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。
jinseinariyuki

2018/04/10 02:21

すみません。基本的なことが出来ていなくて。直ぐ対応します。
defghi1977

2018/04/10 02:58

表示・非表示は嫌だなあ. enabled/disabledの方が好きだなあ
jinseinariyuki

2018/04/10 03:14

確かに、その方が良いかもしれません。
m.ts10806

2018/04/10 03:26

後出しが多すぎると回答との齟齬が発生し、解決までに時間がかかってしまいます。特に今回は特殊な前提があるようですし、開示できることであれば最初からなるべく開示しておいた方がトラブルなくスムーズに回答を得られますよ。
jinseinariyuki

2018/04/10 06:20

ありがとうございます。ご指摘の件了解いたしました。混乱が生じないように最初にしっかり確認を行ってから質問をするように致します。
guest

回答4

0

JavaScript

1document.forms['form1'].addEventListener('change', function(event) { 2 document.getElementById('test1').style.display = this.checkValidity() ? 'block' : 'none'; 3});

投稿2018/04/11 05:28

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2018/04/11 05:32

HTMLFormElement.checkValidity()による判定が一番シンプルでよさそう
jinseinariyuki

2018/05/04 01:21

ありがとうございました。 参考になりました。
guest

0

submitボタンは押したら即座にSUBMIT送信をしてしまうので、submitで送信させずclickイベントにしたい場合はeventを渡し1度止める必要があります。

html

1<input type="submit" value="送信" onclick="checkForm1(arguments[0])"/>

javascript

1function checkForm1(event){ 2 event.preventDefault();

また、documentから参照する場合は「name」に指定されている情報を参照しにいく必要があります。
input_your_nam や input_phone といった「name」はありませんよね?
またform01もありません。

というのをまとめると下記のような感じです。

javascript

1function checkForm1(event){ 2 event.preventDefault(); 3 var form = document.form1; 4 if(form.input01.value == "" || form.input02.value == ""){ 5 alert("エラー"); 6 }else{ 7 document.form1.submit(); 8 } 9} 10

ただし、これだと両方入力されていた場合に即座に送信してしまいます。

また、

あらかじめ、display ="none"されて非表示の見えない「送信ボタン」があって。

名前とメールの入力フォームの両方が入力がされたら「送信ボタン」が表示され送信可能状態になるように

上記をそのまま実装した場合、最初の送信ボタンをtype=buttonにすると実現はできますが、「入力チェック」OKの場合に送信ボタンが表示されて、そのあとに入力内容を空にした場合に入力チェックができません。
少し仕様を考えられた方が良いかもしれません。

名前とメールの入力フォームの両方が入力がされたら「送信ボタン」が表示され送信可能状態になるように

例えば下記のような。

html

1<form action="result.html" name="form1" onchange="checkForm1();return false;"> 2氏名(必須)  :<input name="input01" size="20" type="text" required /> 3メール(必須):<input name="input02" size="20" type="text" required /> 4<input type="submit" value="送信" name="post" disabled> 5</form>

javascript

1var form = document.form1; 2function checkForm1(){ 3 if(form.input01.value == "" || form.input02.value == ""){ 4 form.post.disabled = true; 5 return; 6 }else{ 7 form.post.disabled = false; 8 } 9}

いずれにしてもボタン2つは非現実的かと思います。

投稿2018/04/10 02:36

編集2018/04/10 03:06
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinseinariyuki

2018/05/04 01:23

丁寧に細かく教えて頂き、ありがとうございました。 しならなかったことが多く、かなり役立ちました。
guest

0

ごめんrequired設定してますね. よく見てませんでした.


直接的な答えじゃないけれど, HTMLフォームの仕組みは随分強化されています.(もちろんこれだけでは不十分でサーバーサイドでの入力確認は必要ですが)

https://developer.mozilla.org/ja/docs/Learn/HTML/Forms/Data_form_validation

例えばこんな感じで.

HTML

1<form action="result.html" name="form1" onchange="check(this)"> 2 <label>氏名(必須):<input name="input01" size="20" type="text" required /></label> 3 <label>メール(必須):<input name="input02" size="20" type="text" required /></label> 4 <button id="submit" type="submit">送信</button> 5</form>

JavaScript

1submit.disabled = true; 2function check(form){ 3 const allValid = [].every.call(form.elements, input => input.validity.valid); 4 submit.disabled = !allValid; 5}

投稿2018/04/10 02:24

編集2018/04/10 02:43
defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

requireに何も入っていない場合をチェックするだけならこんな感じでしょうか

javascript

1document.addEventListener('change',function(e){ 2 var t=e.target; 3 if(t.required){ 4 var l=Array.prototype.map.call(t.form.querySelectorAll("[required]"),function(x){ 5 return x.value; 6 }).filter(function(v){ 7 return v==""; 8 }).length; 9 t.form.querySelector('[type=submit]').style.display=(l==0?"inline":"none"); 10 }; 11}); 12HTMLElement.prototype.trigger=function(eventStr){ 13 if (document.createEvent) { 14 var e = document.createEvent("HTMLEvents"); 15 e.initEvent(eventStr, true, true ); 16 return this.dispatchEvent(e); 17 } else { 18 var e = document.createEventObject(); 19 return this.fireEvent("on"+eventStr, e); 20 } 21}; 22window.addEventListener('DOMContentLoaded', function(e){ 23 document.querySelector("[required]").trigger('change'); 24}); 25

HTML

1<form> 2氏名(必須):<input name="input01" size="20" type="text" required> 3メール(必須):<input name="input02" size="20" type="text" required> 4<input type="submit" value="送信" /> 5</form>

投稿2018/04/10 03:20

yambejp

総合スコア114837

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinseinariyuki

2018/05/04 01:21

返信が遅くなってしまい申し訳ありません。 時間は掛かりましたが、何とか乗り越えることが出来ました。 ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問