【jQuery】フォームから様々な値を取得する方法まとめ

jQueryはとても便利なプラグインです。
JavaScriptの普及を助けたといっても過言ではありません。
jQueryのおかげで煩雑なコードをかかずに綺麗なコードで色々なものが作れるようになりました。
今回は少し忘れやすい、jQueryでフォームから値を取得する方法をまとめていきます。

テキスト

よく使われる1行のテキストボックスです。
これはとても簡単でform要素に .val() で値を取得することが出来ます。

HTML

<form id="test-form">
    <input type="text" name="test-form" value="56">
</form>

JavaScript

var formValue = $('#test-form [name=test-form]').val();
var val = Number(formValue) || 0; // NaNのときは0
alert(val); // => 56

ラジオボタン

値を取る、という意味では .val() で取得出来るのですが、実際に取得したいのは選択されている値を取りたいのですよね。
なので :checked で絞り込むということをやります。

HTML

<form id="test-form">
    <input type="radio" name="test-radio" value="1">
    <input type="radio" name="test-radio" value="2" checked>
    <input type="radio" name="test-radio" value="3">
</form>

JavaScript

var val = $('#test-form [name=test-radio]:checked').val();
alert(val); // => 2

チェックボックス

これが面倒。要素の取得方法はラジオボタンと変わらないのですが、複数選択している場合がある。jQueryで .val() でとれるのは複数ある場合は一番最初に出てくる要素の値だけ。
全部取るためには .map() でループ処理します。

HTML

<form id="test-form">
    <input type="checkbox" name="test-checkbox" value="1">
    <input type="checkbox" name="test-checkbox" value="2" checked>
    <input type="checkbox" name="test-checkbox" value="3" checked>
</form>

JavaScript

var $checked = $('#test-checkbox [name=test-checkbox]:checked');
var valList = $checked.map(function(index, el) { return $(this).val(); });
alert(valList); // => ["2", "3"]

複数あると思われるので配列に値を入れます。
.map() の使い方は以下のドキュメントを参考にしてみてください。

セレクトボックス(単一)

option要素に目もくれず、select要素の値を取れば終わりです。

HTML

<form id="test-form">
  <select name="test-select">
    <option value="A">This is A</option>
    <option value="B" selected>This is B</option>
    <option value="C">This is C</option>
  </select>
</form>

JavaScript

var val = $('#test-form [name=test-select]').val();
alert(val); // => "B"

もし This is B の部分を取ってきたい場合は以下のJavaScriptでいけます。

var text = $('#test-form [name=test-select] option:selected').text();
alert(text); // => "This is B"

セレクトボックス(複数)

複数だからまたループするのかぁと思ってたら、今回は全てjQueryがやってくれます。なんて便利なんだjQuery。さすがだよ本当。
普通に .val() しましょう。

HTML

<form id="test-form">
  <select name="test-multi-select" size="3" multiple>
    <option value="A">This is A</option>
    <option value="B" selected>This is B</option>
    <option value="C" selected>This is C</option>
  </select>
</form>

JavaScript

var val = $('#test-form [name=test-multi-select]').val();
alert(val); // => ["B", "C"]

ちなみに何も選択されていないときは空の配列で返ってきます。注意しましょう。

フォーム要素全部

フォームの値を全て取ってくることも可能です。
form要素に対して、 .serialize() で送信すると、URLのGETみたいに URLの?以降の部分が取得出来ます。 .serializeArray() で取得すると配列に分解したものが取得出来ます。

HTML

<form id="test-form">
  <input type="text" name="test-text" value="This is text." />
  <select name="test-multi-select" size="3" multiple>
    <option value="A">This is A</option>
    <option value="B" selected>This is B</option>
    <option value="C" selected>This is C</option>
  </select>
</form>

JavaScript

var $form = $('#test-form');
var query = $form.serialize();
var arrVal = $form.serializeArray();
alert(query); // => "test-text=This+is+text.&test-multi-select=B&test-multi-select=C"
alert(arrVal); // => [{name:"test-text", value:"This is text."}, 〜〜〜]

一気にformの値を全て取りたいときはこっちのほうが絶対便利。
やっぱりjQueryって便利ですね。

この記事を読んでいるあなたにおすすめ!

少し古いですがjQueryの使い方の基本はこれを読んでおけば完璧です。

jQueryクックブック
posted with amazlet at 12.09.06
jQuery Community Experts
オライリージャパン
売り上げランキング: 86232