なんだか最近、jqueryの記事ばっかり載せてます。。。それだけ頻繁に使うし、忘れやすいし、ってことですねー。
select 単一選択の場合の値の取得
例えば、こんなselectタイプがあったとして、
<select name='fruits'>
<option value='banana'>バナナ</option>
<option value='apple'>りんご</option>
<option value='grape'>ぶどう</option>
<option value='strawberry'>いちご</option>
</select>
選択されている値をとるためのjqueryは、
$('[name=fruits]').change(function() {
var fruit = $(this).val();
console.log(fruit);
});
この場合、「val」を取得しているので、”バナナ”が選択されていれば、出力は、
“banana”
になります。
ところで、valueではなく、選択肢のテキストを取得したいような場合もあります。
その場合は、
$('[name=fruits]').change(function() {
var fruit_text = $([name=fruits] option:selected).text();
console.log(fruit_text);
});
<wbr>
これで、
“バナナ”
が表示される。
select 複数選択の場合の値の取得
複数選択可能なセレクトボックスにした場合、複数の値をどうやって取るのか。
<select name='fruits' multiple='multiple'>
<option value='banana'>バナナ</option>
<option value='apple'>りんご</option>
<option value='grape'>ぶどう</option>
<option value='strawberry'>いちご</option>
</select>
“multiple”が複数選択可能なセレクトボックスですね。
このケースで、もし先ほどと同じjqueryにすると、
$('[name=fruits]').change(function() {
var fruit = $(this).val();
console.log(fruit);
});
//バナナといちごを選択している場合、
//出力は、
//['banana', 'strawberry']
$('[name=fruits]').change(function() {
var fruit_text = $([name=fruits] option:selected).text();
console.log(fruit_text);
});
//バナナといちごを選択している場合、
//出力は、
//バナナいちご
となります。
valueについては配列で返ってくるので扱いやすいですが、textの方は、値が連結されてしまいます。
これはあまり使い勝手がよろしくないですね。
テキストを分けたい場合(というか、「分けたくない」方がレアだと思いますが)、
$('[name=fruits]').change(function() {
var fruit_text_array = [];
$('[name=fruits] option:selected').each(function() {
fruit_text_array.push($(this).text());
});
});
//バナナといちごを選択している場合、
//出力は、
//['バナナ', 'いちご']
てな感じで、「each」で一つずつ取得して、配列にpushすればよいです。