我正在玩一些代码并遇到一个问题,即函数仅适用于第一个元素,尽管设置了一个变量来抓取函数运行的元素的id。
这将更好地解释http://jsfiddle.net/matt3224/GXjdb/
function calcr() {
var sum = 0;
var parent = $(':checked').closest('form').attr('id');
var names = $('#' + parent + ' :checked').map(function () {
sum += (this.value - 0);
return this.name;
}).get().join(',');
var spans = $('#' + parent + ' .totalisr').text(sum);
}
$('input[type="radio"], input[type="checkbox"], select').change(calcr);
如果你可以帮我解释为什么会发生这种情况,并提出一个很棒的潜在解决办法。
感谢。
答案 0 :(得分:1)
看起来问题孩子就是这一行$('#' + parent + ' :checked')
选择没有checked
属性
原来是
$('#' + parent + ' :selected')
还需要更换
var parent = $(':checked').closest('form').attr('id');
带
var parent = $(this).closest('form').attr('id');
<强> Check Fiddle 强>
答案 1 :(得分:0)
您不需要使用:checked 或:selected伪选择器。您可以使用select元素本身来查找所需的父表单。
var parent = $(':checked').closest('form').attr('id');
将上述内容更改为:
var parent = $(this).closest('form').attr('id');