通常、送信ボタンが押されるとformのactionが実行されますが、formタグに「onsubmit」、もしくは外部化したJavascript内であれば「submi()」内に処理を記述することで、入力チェックを行うことができます。
今回は分かりやすくformタグに「onsubmit」を追加することで実装してみます。
この何かしらの選択がされているかを確認する方法、つまり必須項目にチェックがあるか確認する方法です。ラジオボタンだけでなく、チェックボタン(input type="checkbox")にも応用できます。
ラジオボタンに何かしらの選択がされているかを確認するポイントは、ラジオボタンを一つずつ「true」か「false」をチェックし、そのすべてをチェックした後で、選択されていないかどうかを判断する必要がある、ということです。
これを踏まえてJavascriptを確認します。
「ラジオボタン.checked」と指定すると、チェックされていれば「true」をチェックしていない場合は「false」を返します。
これを利用してひとつずつラジオボタンを確認して、そのすべてが「false」だとアラートを出すという仕組みにしたいわけです。
ただ、この発想だと「1個目のラジオボタンがfalseなら」とif文を書いて、さらにその中で「2個目のラジオボタンがfalseなら」とさらにif文を書いて・・・とすべてチェックしなければなりません。
もちろん、一つのif文で「「1個目のラジオボタンがfalse かつ 2個目のラジオボタンがfalseなら かつ ・・・」と書いても同様です。
このやり方だと、ラジオボタンが追加・変更する度に入力チェックのJavascriptを修正する必要があり、メンテナンス性に優れていません。
というわけで、別の発想を考えます。
あらかじめ何かしらのフラグを立て、ラジオボタンをひとつずつ確認し、「ture」が返ってきたらそのフラグを変更するようにします。
つまり、あらかじめ設定したフラグに変更がなければすべてがfalseが返ってきたことになるようにするわけです。
フォームを受け取る側で属性があるかチェックして属性があればその値を取得する、なければなしって処理をすればよい話なのですが、フォームを受け取る側で属性があるかのチェックを行えない場合、フォームを送る側で調整する必要があります。そこで、この処理をJavascriptを使って実装してみます。
サンプルhtmlです。
まずは条件を「チェックボックスに何もチェックがない場合」と「何かしらの値を入れる」と2つに分けて考えます。
「チェックボックスに何もチェックがない場合」というのは先に説明したとおりですので説明は省きます。
次に「何かしらの値を入れる」。
ブラウザ上には表示されずに「何かしらの値を入れる」にはinputタグのtype属性の値を「hidden」にすることで実現できます。
これで最低限の実装は可能となりました。つまり、チェックボックスがあろうがなかろうが「何かしらの値を入れ」てフォームを実行することが可能となったわけです。
あとはJavascriptを使って、「チェックボックスに何もチェックがない場合」にのみ「hidden」を送るようにします。
<script type="text/javascript">
function check(FormTest){
var inputs = FormTest.elements;
for(var i=0; i<inputs.length; i++){
if(inputs[i].type == "hidden" && inputs[i].value == "チェックなし"){
FormTest.removeChild(inputs[i]);
}
}
var checkboxs = FormTest.test;
var checkboxsFlag = new Boolean(false);
for(var i=0; i<checkboxs.length; i++){
if(checkboxs[i].checked == true){checkboxsFlag = true;}
}
if(checkboxsFlag == false){
var newCheckboxs = document.createElement("input");
newCheckboxs.setAttribute("type","hidden");
newCheckboxs.setAttribute("name","test");
newCheckboxs.setAttribute("value","チェックなし");
FormTest.appendChild(newCheckboxs);
}
FormTest.submit();
}
</script>
この書籍の中で、ライティングのユーザビリティについて触れている項目があり、激しく共感する部分だったので、ここで備忘録としてピックアップする。 ・・・
この書籍は、I部 リサーチ、II部 デザイン、III部 インプリメンテーションと三部構成になっている。この記事では、その中から、I部 リサーチ、・・・
これを知ったときはマジか!と飛び跳ねた。あらためて思い返してみると、確かに公式チュートリアルでも触れていたことをうっすら思い出す。そしてそのときとやり方がなん・・・
試したことはまだないけど、Macで編集時と書き出し後で色味が変わって困ったときのために備忘録。 プロジェクト設定 > 「カラーマネジメント・・・
プロジェクト設定と環境設定について詳しく解説されている情報がなかなか見つからないので、要所要所で知り得た情報を更新していきます。 プロジェクト設定 ・・・
Clipyが超絶便利そうだったので、macOS Big Sur にインストール&再起動して使ってみた。ところが、command + c を複数の箇所で行い、c・・・
requestAnimationFrame をはじめて見たので調べていたら、setTimeout や setInterval は requestAnimati・・・
6年ぶりに読み返したが、今なおハッとさせられることが多く見つかる。 この本で忘れないようにしたい項目をピックアップするだけでも役に立ちそ・・・
この記事では、以前に読んだ際に付箋を付けていたが、その部分だけを備忘録としてピックアップするため、本の要約ではない。実際は、何倍も濃い内容で、練・・・
もう一回、全部読み返したいところだが、書籍がありすぎるので、当時付箋紙をつけていたところだけをピックアップ。書籍内ではより具体的な説明があるので・・・
これまでに扱ったことのないようなものを取り扱うときには、次のような問いを参考にすると何をしたらよいかが分かってくる。 どの部分が可動部で、どの部分が固定部か。・・・
以前に書いた「このサイトのリニューアル」で、リニューアル意思を示しつつも結局保留にして、先送りしてしまっていたけど、このあいだの週末(2013.3.29-30)・・・
エラーが起こっても大丈夫なシステムを作ると、みんなそれに頼るようになるので、信頼性を高くしておいたほうがよいだろう。 エラーの原因を理解し、その原因が最も少な・・・
こんな製品は使いたくない例1 教示がよくない。 システムの操作が可視的でない。 操作した結果が目に見えない。 こんな製品は使いたくない例2 デザイナーは良か・・・
新規コンテンツ「たびのと言ノ葉」公開 Webマガジン「たびのと」を夏に公開しましたが、たびのとのコンテンツの一つとして「たびのと言ノ葉(ことのば)」を新規で作・・・
いつもは直接アップロードしているので気にしていなかったが、WordPress管理画面のメニュー「メディア」からfavicon.icoをアップロードしようとした・・・
「デザインノート EXTRA good design company 水野学」から抜粋して自分なりの解釈を追加した過去メモ。 「iD」メイキング ・・・
外界の中の知識 人は環境を構造化して、思い出さなくてはならないものに関する多量の情報を手に入れることができるようにしている。 そのために、「ofの知識(事実につ・・・
もはや他ブラウザでも問題ないようにクロスブラザ対応だけでなく、スマートフォンやタブレット端末などマルチデバイスに対応できるようになっておかなければ、という時代に・・・
いろいろ調べると、疑似クラス「:placeholder」と「:placeholder-shown」というのにいきつく。 ちょっとハマってしまったので備忘録。ハマ・・・
「test」
「>ころころさん コメントありがとうございます! 確かに、APIドキュメント見ましたが、ライブに関する情報は今のところ取得できないようですね。 インスタライ・・・」
「SIGMAから超軽量で明るい単焦点レンズが2本発売になりましたので、リストにレンズ情報追加しました!」
「>名無しさん ご指摘、ありがとうございます! 記事冒頭の「まずはサンプル」のサンプルが動いていませんでしたので修正しました。」
「>前田さん コメントありがとうございます。 環境は分かりかねますが、修正したいファイルのパーミッションを604や644に変更すると書き込みできるようになります(・・・」
「アバターを取得する「get_avatar」についても追記しました!」
「「値をクリアする」を追加しました。チェックボックスやラジオボタンの値を何も選択していない状態に戻すときについて触れています。」
「>匿名さん コメントありがとうございます。 サンプルでは、beforeは何も処理していないので期待する表示にならない、で正解です。 クリックした後が、対応・・・」
「(匿名)さん コメントありがとうございます。何も設定変更していないのに、それまで使用できていたサーバーが突然使えなくなるのは辛いですよね、、。 ここで紹介したや・・・」
「コメントありがとうございます! そもそもできるかはわかりませんが、ソースを書き換える必要はあります。 下記記事などが参考になるかもしれません。 illustra・・・」
WEB制作マークアップJavaScriptフォーム、送信前にJavascriptで入力チェックを行う方法 | シンプルシンプルデザイン