如何根据2个单选按钮更改变量的值?

时间:2013-12-04 23:26:36

标签: jquery

我有一个名为: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);

2 个答案:

答案 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
});

做了一个小提琴:http://jsfiddle.net/filever10/CsDH4/