2013-12-04 2 views
0

У меня есть переменная, называемая: var rent = 100; и, используя 2 переключателя с id = «02» и id = «03», я хочу, чтобы значение было 100, когда id = «03», и значение 2, когда 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

Как это? http://jsfiddle.net/pRawE/ –

+0

Привет, scrowler, не совсем. См. Общее количество переменных; в верхней части экрана? Я дал ему значение в нижней части экрана, которое включает в себя ренту. Общее значение var будет отображаться как часть

. Я вставил вот так: '+ total +', поэтому мне не нужен .html() – Ash

+0

Ash, это пример того, как выбрать ваши радиостанции –

ответ

-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; 
} 

To:

if ($('#02').is(':checked')) { 
    rent = 2; 
} 

Примечание: Я понимаю, что ваш код является частью более широкого контекста, но она имеет дело с элемент с идентификатором O1 (буква «O» и номер один), а не 01.

Вы должны изменить его, так как это значение легко может быть неверно истолковано.

+0

Привет acdcjunior # 01 - это флажок для опции электронной почты, и он отлично работает, как я хочу. Моя проблема: # 02 и # 03 - радиокнопки, и если я изменил код на то, как вы его показали, var rent does not = 2, it = 100, например, исходное значение в верхней части экрана, как если бы переключатель был не проверяется, когда это на самом деле. – Ash

+0

Оба флажка. Мне нужно, чтобы они были переключателями. Игнорировать # 01. # 02 - радиокнопка и № 03, но у меня нет кода для № 03, потому что я считаю, что это неважно. Если # 02 проверяется рента = 2. Если нет, арендная плата = 100. Извините за путаницу. Это непросто объяснить! – Ash

+0

Я бы сказал, что вы должны так использовать prop; el.prop ('проверено'); поскольку он больше похож на другие методы jQuery в том, что только с свойством он получает свое значение, а когда вы добавляете «, true», он устанавливает значение. Читайте здесь; http://api.jquery.com/prop/#prop1 –

-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/

+0

Эй, просто чтобы вы знали, я не выполнил ваш ответ и действительно не знаю, кто это сделал, или почему ...:/ – acdcjunior

+0

Значения сбрасываются до значения по умолчанию при объявлении переменных. Мой первый jsfiddle (http://jsfiddle.net/acdcjunior/ncknd/1/), помимо флажков, имел точный, сброс, поведение. Я считаю, что это похоже, но это не проблема, как прокомментировал ОП. – acdcjunior

+0

Точно! ** Вы ** упомянули сброс, а не ОП. Просто посмотрите выше * «Я просто добавил этот ответ, чтобы убедиться, что способ сброса значений по умолчанию» *. --- И я тоже сказал, что скрипка с флажками - это всего лишь деталь, ее просто HTML, переименовать из флажка «type =» «' to 'type =« radio »', и вы получите свои радиобокс, поведение останется без изменений: код javascript не нужно изменять, и вопрос был о javascript. // моя точка, просто изменил HTML: http://jsfiddle.net/acdcjunior/ncknd/3/ – acdcjunior

Смежные вопросы