我有一个名为:var rent = 100的变量;并且,使用id =“02”和id =“03”的2个单选按钮,当检查id =“03”时,我希望值为100,当检查id =“02”时,我想要值2。到目前为止,使用下面的代码,无论是否按下该值是2: - (
var selection;
var email = 0;
var rent = 100;
var total;
if($('#select').val() == "Basic"){
selection = 15;
}else{
if($('#select').val() == "Highspeed"){
selection = 30;
}else{
if($('#select').val() == "Extreme"){
selection = 60;
}
}
}
if($('#O1').is (':checked')){
email = 5;
}
if($('#02').prop ('checked',true)){
rent = 2;
}
total = parseInt(selection + email + rent);
答案 0 :(得分:-1)
在这部分代码中:
if ($('#O1').is (':checked')){
email = 5;
}
表达式$('#O1').is (':checked')
验证是否已选中#O1
。
另一方面,在这部分代码中:
if ($('#02').prop ('checked',true)){
rent = 2;
}
表达式$('#02').prop ('checked',true)
未验证#02
的状态,它强制将#02
设置为已选中。
因此,要修复您的行为,请尝试更改:
if ($('#02').prop ('checked',true)){
rent = 2;
}
要:
if ($('#02').is(':checked')) {
rent = 2;
}
注意:我理解你的代码是更大的上下文的一部分,但是它处理的是一个id为O1
的元素(字母“O”和第一个),而不是01
。
您应该更改它,因为该值很容易被误读。
答案 1 :(得分:-1)
<强> IDs shouldn't start with a number 强>
因此,即使您在O
上使用0
而不是$('#O1')
,也不应该0
开始。
使用$('#02').prop ('checked',true)
,在if
语句中不会按照您希望的方式工作,因为它用于设置状态,而不是像$('#O1').is (':checked')
那样检查状态是否正确在它之前。
您在更新总计时也使用parseInt
,但此时值应全部为整数;所以这不应该是必要的。
更大的问题可能是,如果在更改时运行另一个选择,则默认值永远不会被重置。如果它正在从另一个元素运行一个事件,那么这不会是一个问题。
这可能会更容易
下面解决了这两个问题,并且不需要知道在更改时执行此操作的当前状态。
HTML:
<select id="select">
<option value"Basic">Basic</option>
<option value"Highspeed">Highspeed</option>
<option value"Extreme">Extreme</option>
</select>
<label for="email">email<input type="radio" name="rad" id="email"/></label>
<label for="rent">rent<input type="radio" name="rad" id="rent"/></label>
<button>click me</button><!-- something to click -->
jQuery的:
var sets={Basic:15,Highspeed:30,Extreme:60,rent:100,email:0},//set defaults
selection=sets.Basic,email=sets.email,rent=sets.rent,total;//set vars
//run on change
$('#select,input[name="rad"]').on('change', function() {//on change
this.id==='select'?selection=sets[$(this).val()]://set select
this.id==='email'?(email=5,rent=sets.rent)://set email
(rent=2,email=sets.email);//set rent
total=selection+email+rent;//update total
});
//run on click
$('button').on('click', function() {
$('#select,input[name="rad"]').each(function() {
if(this.id==='select'){selection=sets[$(this).val()]}//set select
else if(this.id==='email'&&this.checked){email=5,rent=sets.rent}//set email
else if(this.checked){rent=2,email=sets.email}//set rent
});
total=selection+email+rent;//update total
});