2014-10-18 54 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> 

的$评估结果如下莫名其妙地变成$层2未定义的每一次等级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,它有控制台错误,所以你想先解决这个问题,然后更新你的小提琴链接。 – 2014-10-18 01:56:14

+1

更新了代码,发现了错字和Mritunjay的答案。这个问题不值得继续。 (脸红)。 – 2014-10-18 02:03:07

回答

1

这不是问题所在。问题是在这里

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

这里你说的&& tier2这应该是&& $tier2

在你的演示中你有$tier1, $tier2, $tier3问题出在tier3

FIXED DEMO

+0

谢谢,这是我的尴尬。 – 2014-10-18 02:03:57

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