2014-10-18 3 views
0

Я проверяю проверенное состояние переключателей на странице, чтобы продолжить, когда все они нажимается:Булевы операции влияют на переменные в JS?

<form> 
    <input type="radio" name="tier0" /> 
    <input type="radio" name="tier1" /> 
    <input type="radio" name="tier2" /> 
    <input id="reset" type="button" value="Reset" /> 
</form> 

Оценка $ результат ниже как-то получается $ TIER2 неопределенных каждую кнопку времени Уровень1 нажата и $ уровня это правда, поэтому результат $ никогда не является истинным, и я не могу продолжить. Проверьте это: http://jsfiddle.net/29ppxpgm/

var $tier0; 
var $tier1; 
var $tier2; 
var $result; 

function display() { 
    $tier0 = $('[name=tier0]').prop('checked'); 
    $tier1 = $('[name=tier1]').prop('checked'); 
    $tier2 = $('[name=tier2]').prop('checked'); 

    // this boolean operation seems to affect the form elements 
    $result = $tier0 && $tier1 && tier2; 

    $('#result').html($tier0.toString() + ' & ' + $tier1.toString() + ' & ' + $tier2.toString() + ' => ' + $result.toString()); 
} 

display(); 

$('input[type=radio]').click(function() { 
    display(); 
}); 

$('#reset').click(function() { 
    $('[type=radio]:checked').prop('checked', false); 
    display(); 
}); 

Почему?

+0

что вы имеете в виду "удалений"? Кроме того, что вы пытаетесь сделать здесь? Я запустил ваш jsfiddle, и у него есть консольные ошибки, поэтому вы хотите сначала решить эту проблему, а затем обновить ссылку на скрипт. –

+1

Обновлен код, отмечена опечатка и ответ Мритонджей. Вопрос не стоит держать на SO. (румянец). –

ответ

1

Это не проблема. Проблема здесь

$result = $tier0 && $tier1 && tier2; 

Вот вы говорите && tier2, которые должны быть && $tier2.

В вашей демонстрации у вас есть $tier1, $tier2, $tier3 проблема была с tier3.

FIXED DEMO

+0

Спасибо, это смущает с моей стороны. –

2

Мне кажется, у вас есть virable опечатка, вы определили $tier2, и вы refrence как tier2.

function display() { 
    $tier0 = $('[name=tier0]').prop('checked'); 
    $tier1 = $('[name=tier1]').prop('checked'); 
    $tier2 = $('[name=tier2]').prop('checked'); 
    $result = $tier0 && $tier1 && *tier2*; // it should be $tier2 
    $('#result').html($tier0.toString() + ' & ' + $tier1.toString() + ' & ' + $tier2.toString() + ' => ' + $result.toString()); 
} 

см. Demo.

1

Кажется есть ошибка здесь:

$result = $tier0 && $tier1 && tier2; 

это должно быть как

$result = $tier0 && $tier1 && $tier2; 
           ^---------This is added