我对每个()和.each()感到困惑......我想我需要同时使用它们,但我不确定如何......
基本上,我有一系列复选框,当它们被选中时,我想得到最近的表行的id并将其添加到一个数组,然后我可以序列化并传递给一个函数。
所以,html看起来像这样:
<tr id="t1"><td><input type="checkbox" name="did[]" value="232" class="bd" /></td></tr>
<tr id="t2"><td><input type="checkbox" name="did[]" value="234" class="bd" /></td></tr>
<tr id="t3"><td><input type="checkbox" name="did[]" value="676" class="bd" /></td></tr>
<tr><td><button id="tsid" name="tsid" type="button">Send</button></td></tr>
而且,当选中此复选框时(如果选择),我想获得最接近的tr id并将其存储在数组中:
var trids = []
然后序列化输入数据和trids数组......
到目前为止,我只有这个:
$('#tsid').click(function() {
//meant to get the values of the selected checkboxes
var myData = $('input[name=did[]]').serialize();
//meant to find and store the closest tr ids in an array...
$('.bd').each(function() {
var trids = $(this).closest("tr").get(0); //and now I'm lost...
});
}
答案 0 :(得分:1)
应该是:
$('.bd:checked').each(function() {
trids.push($(this).closest("tr").attr('id')); // instead of var trids = ....
});
$('.bd:checked')
仅选中已选中的复选框。
closest('tr')
获取父tr
,因为您已经正确地完成了操作。 attr('id')
获取此id
的{{1}}。 tr
中没有必要get(0)
已经只选择了一个元素
然后使用数组上的closest()
方法将此值添加到数组trids
。
<强>更新强>
jQuery的push()
函数从表单元素的值中生成一个字符串,例如:
.searialize()
我不认为它适用于数组。我知道的唯一解决方案是自己生成数组的字符串:
field1=value1&field2=value2&...
这会将数组值附加到序列化字符串 但我想有更好的解决方案。
答案 1 :(得分:0)
只需获取元素,然后使用map
函数从每个tr元素中获取id。使用get
方法将结果作为数组而不是jQuery对象获取。
var trids = $('.bd').map(function(i,e){ return $(e).closest('tr').attr('id'); }).get();
答案 2 :(得分:0)
这段代码对我有用
$(document).ready(function () {
var checkbox_values= [];
$('input[type="checkbox"]').change(function() {
if(this.checked) {
$(this).each(function(){
var checked_value = $(this).val();
checkbox_values.push(checked_value);
});
console.log( "checked_value: " + checkbox_values);
//output checked_value: 232
//output checked_value: 232,234
//output checked_value: 232,234,676
} else {
console.log('not checked');
}
});
});