【发布时间】:2013-03-23 07:37:36
【问题描述】:
当复选框被javascript函数设置为false时,下一个函数似乎并不知道它已被设置为false,它只是忽略它。
HTML
<input type="checkbox" name="accs" id="50" class="arms"/>Arm 1: $50<br/>
<input type="checkbox" name="accs" id="60" class="arms"/>Arm 2: $60<br/>
<input type="checkbox" name="accs" id="70" class="neck"/>Neck 1: $70<br/>
<input type="checkbox" name="accs" id="80" class="neck"/>Neck 2: $80<br/>
<div id="total">$500</div>
Javascript:该函数根据输入类禁用复选框
$('.arms, .neck').change(function(){
var myClass = $(this).attr('class');
$('.'+myClass).not(this).prop('checked', false);
});
Javascript 下一个函数:如果复选框被启用或禁用,则处理操作的代码块
var input = document.getElementsByTagName("input");
var total = document.getElementById("total");
var prev;
for(i=0;i<input.length;i++){
input[i].onchange = function(){
if (this.type != 'text'){
if(this.checked){
$("#total").fadeOut(300);
$("#total").fadeIn(300);
prev=parseFloat(total.innerHTML.replace(/[^0-9\,]+/g,"")) + parseFloat(this.id);
total.innerHTML = "$" + prev.formatMoney(0, ',', '.');
}else{
$("#total").fadeOut(300);
$("#total").fadeIn(300);
prev=parseFloat(total.innerHTML.replace(/[^0-9\,]+/g,"")) - parseFloat(this.id);
total.innerHTML = "$" + prev.formatMoney(0, ',', '.');
}
}
}
}
点击所有复选框后,您意识到它不会回到原来的价格 (500) 而是继续加起来。
我没有使用收音机的原因是因为表单必须为所有选项发送相同的“输入名称”
【问题讨论】:
-
如果你只想选择一个手臂和一个脖子,为什么不使用两个无线电组而不是四个复选框?
-
@j08691 收音机是最好的选择,但我们的项目很难将格式更改为收音机。如果每个收音机在 html 中都有相同的输入属性:name="accesory" 并且也与第一个函数兼容,那么它会起作用
-
耻辱,您可以通过以下方式减少它(并解决问题):jsfiddle.net/j08691/kU6ac/2。另外,您应该真正在 value 属性中设置值,而不是 ID。
-
id 不能以数字开头(或者只是 html 5 中的数字)stackoverflow.com/questions/70579/…
-
我提出了一种可能的解决方案 - 与您的完全不同,但如果可以的话,请将其用于想法。
标签: javascript jquery