初めてやった。
方法
こんなのがあったとして
<input type="text" name="sample[]" value="">
<select name="sample[]"><option value=""></option></select>
<button type="submit">submit</button>
こう。
$(function(){
$('button').on('click',function(){
console.log($('[name="sample[]"]').get(0).tagName); //INPUT
console.log($('[name="sample[]"]').get(1).tagName); //SELECT
})
})
またはこう。
$(function(){
$('button').on('click',function(){
var num = $('[name="sample[]"]').length;
for(let i = 0; i < num; i++){
console.log($('[name="sample[]"]').get(i).tagName);
}
})
})
「.tagName」を使うと取得できる。尚、.tagNameの前に.get()を入れないと動かない。
ピンポイントでチェックする場合なら、.get()を使わずに.prop()でもいける。
$(function(){
$('button').on('click',function(){
$('[name="sample[]"]').each(function(){
console.log($(this).prop('tagName'));
})
})
})
例えば、forの場合はget、eachの場合はpropみたいな使い分けかしらね。
活用例
<input type="text" name="sample[]" value="">
<select name="sample[]"><option value=""></option></select>
<button type="submit">submit</button>
$(function(){
$('button').on('click',function(){
var num = $('[name="sample[]"]').length;
for(let i = 0; i < num; i++){
if($('[name="sample[]"]').get(i).tagName == 'INPUT'){
alert('未入力だよ');
return false;
}
}
})
})
特定の要素に対してバリデーションを作れる。
上記の例でいうと、そもそもformで異なる要素で同じnameを使用するケースはほぼ無いのだけど。というか、バリデーションを仕込むなら普通はHTML側で必須にするし、そうでなくてもclassなりidで指定できるようにする。普通なら。でもレアケースは存在するわけで。
バリデーションに限らず、後付で機能をつけたいけどHTMLを触れないときに活躍するのかもね。
注意点
動作確認を兼ねて、alertなりconsole.logなりで一旦出力した方がいい。
出力した内容を使って条件分岐を組む必要がある。
大文字で出てるのに、小文字で条件分岐を仕込むと発火しない。
コメント