この記事を書いている僕は、フロントエンドエンジニア歴が15年ほど。
web業界からゲーム業界まで数多くのwebサイトやアプリケーションを制作しています。
こういった僕が、分かりやすく解説していきます。
読者の悩み
こういった疑問に答えます。
本記事の内容
デモページを用意
デモページを用意してますので実際に動きが確認できます。
サンプルコードを用意
コード[HTML / SCSS / CSS / jQuery]をGitHubの方でも確認できます。
実際のソースコードをアップしているのでクローンしてもOKです。
phpファイル
scssファイル
jsファイル
cssファイル
デモページとソースコードを確認しながらご覧ください。
骨組みは以下の6つです。
ではコードを見ていきます。
ここではまず、jQueryを使ってHTMLから情報を取得する方法を簡単に解説します。
textメソッド
これは引数に指定した文字列を要素に「セット」するメソッドです。
下記のように引数の文字列を「Vue.js」にセットすると、h3要素内を変更できます。
$('h3').text('Vue.js');
しかしtextメソッドは下記のように引数を指定せずに用いることで、h3要素内の文字列を「ゲット(取得)」することもできます。
var text = $('h3').text();
htmlメソッド,cssメソッド
jQueryで値をセットするメソッドは大抵ゲットにも使うことができます。htmlメソッドとcssメソッドもゲットとして使うことができます。
HTMLを取得する場合、下記のように引数を指定せずに用いることで、「#wrap」内のHTMLを取得することができます。
var html = $('#wrap').html();
<div id="wrap">
<h2>学びたいフレームワークをクリック!</h2>
</div>
var fontSize = $('h2').css('font-size');
h2 {
font-size: 22px;
}
HTMLの属性
HTMLのタグにはclassやid、srcといったものを指定できますが、これらを属性と呼びます。様々な属性がありますが、下記に代表的なものを載せておきます。
・class ・id ・href(aタグ) ・src(imgタグ) ・type(inputタグ) ︙
attrメソッド
HTMLの属性はattrメソッドを用いて「ゲット」と「セット」ができます。
例えば、attr('id', 'title')のように第一引数に属性名、第二引数にその属性値を指定することで属性をセットすることができます。
そして、第二引数を指定しない場合は、その属性の値を取得できます。
属性をセットする場合(h2要素にtitleというidをセット)
$('h2').attr('id', 'title');
属性の値を取得する場合(a要素のhref属性の値をゲット)
var url = $('a').attr('href');
ここではフォームに値を入力し送信ボタンを押すとフォームの内容を取得して表示するようにしてみます。
inputタグの入力値
inputタグに入力されている値は、valメソッドで取得できます。
var selectItem = $('#select-form').val();
submitイベント
フォームが送信されたときのイベントとして、submitイベントがあります。
submitイベントを用いると、送信ボタンがクリックされたときだけでなく、「Enter」キーでフォームが送信された場合もイベントが発生します。
$('#form').submit(function() {
var selectItem = $('#select-form').val();
︙
});
selectタグを用いると選択肢式のセレクトボックスを作ることができます。
selectタグとoptionタグからなり、各optionタグが選択肢になります。
下記のように、selectタグはvalメソッドによって、選択中の値(optionタグのvalue属性の値)を取得できます。
<form id="form" class="form">
︙
<select id="select-form" class="select-form">
<option value="0">選択してください</option>
<option value="1">1. React</option>
<option value="2">2. Angular</option>
<option value="3">3. Vue.js</option>
</select>
︙
</form>
var selectItem = $('#select-form').val();
ここではフォームが送信されたときに、フォームに値が入力されているかどうかをチェックする機能を実装します。
valメソッドでフォームの値を取得しフォームに値が入力されていなければエラーを出します。
エラーメッセージの仕組み
エラーメッセージを表示するために、下記のような条件分岐を行います。
if (入力値が空) {
//エラーメッセージを表示
} else {
//エラーメッセージを表示
}
空文字列について
中身の無い文字列のことを「空文字列」と言います。空文字列は通常「''」(シングルクォーテーション2つ)で表記します。
フォームに値が入力されているかどうかは、valで取得した値が空文字列「''」かどうかで判断することができます。
$('#form').submit(function() {
var textItem = $('#text-form').val();
if (textItem == '') {
//エラーメッセージを表示
}
︙
});
次はフォームの値を自動で設定できるように、選択したボタンに応じて理由の一部が書き込まれるようにします。
valメソッドは値を取得することもできますが、反対に引数に値を指定することでフォームに値をセットすることもできます。
<div class="option-wrapper">
︙
<div class="option-btn" data-option="1">1. React</div>
︙
<div class="option-btn" data-option="2">2. Angular</div>
︙
<div class="option-btn" data-option="3">3. Vue.js</div>
︙
</div>
$('.option-btn').click(function() {
var optionText = $(this).text();
︙
$('#text-form').val(optionText + 'が好きな理由は、');
︙
});
次はセレクトボックスも自動で選択されるようにします。
selectタグもvalメソッドを用いて自動で選択させることができます。先ほどのinputタグとの違いは、selectタグの場合選択肢が限定されているということです。
optionタグのvalue属性に合致する値をvalメソッドの引数に指定します。
$('#form').submit(function() {
var selectItem = $('#select-form').val();
︙
$('#output-select').text(selectItem);
︙
});
<p class="output-item">好きなフレームワーク:<span id="output-select"></span></p>
カスタムデータ属性
先ほどHTMLの属性を学習しましたが、属性は自分でつくることもできます。
これをカスタムデータ属性といい、「data-」から始まる属性名を自由に設定できます。data属性は何らかの情報をHTML内に指定しておくのに便利なため、jQueryではしばしば用いられます。
<div class="option-wrapper">
<div class="option-group">
<img class="option-image" src="https://buff-design.com/demo/img/react.jpg">
<div class="option-btn" data-option="1">1. React</div>
</div>
<div class="option-group">
<img class="option-image" src="https://buff-design.com/demo/img/angular.jpg">
<div class="option-btn" data-option="2">2. Angular</div>
</div>
<div class="option-group">
<img class="option-image" src="https://buff-design.com/demo/img/vue.jpg">
<div class="option-btn" data-option="3">3. Vue.js</div>
</div>
</div>
ここでは、選択ボタンにdata-optionという属性を設定し、それぞれのdata-option属性にはselectタグの選択肢(option)のvalue属性に対応する値を指定しておきます。
こうすることで、緑色の選択ボタンを押して自動的にセレクトボックスが選択されるようにしています。
$('.option-btn').click(function() {
︙
// 変数clickedOptionに、クリックした要素のdata-optionの値を代入してください。
var clickedOption = $(this).attr('data-option');
︙
// 変数clickedOptionを用いて、「#select-form」の値を自動で入力してください。
$('#select-form').val(clickedOption);
︙
});
今回は以上になります。
フォーム操作はjQueryの様々な知識の組み合わせが必要ですが、1つ1つ理解すれば難しいものではありません。
作成方法が不安な方は是非参考にしていただけると嬉しいです。