为什么第一个将它视为布尔值而第二个不是?

时间:2016-04-22 06:01:01

标签: javascript jquery radio-button onchange

我想根据单选按钮切换两个div的状态。基于我想要切换div的可见性的值。第一个div显示和隐藏基于this.value,但第二个案例我使用!this.value它不起作用,我也试过!Boolean(this.value)



$('[name="radio"]').change(function() {
  console.log(this.value,!this.value);
  $('#first').toggle(this.value); // this works
  $('#second').toggle(!this.value); // this one not
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="radio" name="radio" value="false" />
<input type="radio" name="radio" value="true" />

<div id="first">1</div>
<div id="second">2</div>
&#13;
&#13;
&#13;

  

为什么第一个将它视为布尔值而第二个不是?

1 个答案:

答案 0 :(得分:5)

因为this.value是一个字符串,'true''false'都是真值,所以否定它总是会给false。那是你的第二个条件永远不会成真

&#13;
&#13;
$('[name="radio"]').change(function() {
  console.log(this.value, !this.value);
  var value = this.value === 'true';
  $('#first').toggle(value);
  $('#second').toggle(!value);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="radio" name="radio" value="false" />
<input type="radio" name="radio" value="true" />

<div id="first">1</div>
<div id="second">2</div>
&#13;
&#13;
&#13;

另请参阅toggle()方法

toggle: function( state ) {
    if ( typeof state === "boolean" ) {
        return state ? this.show() : this.hide();
    }

    return this.each(function() {
        if ( isHidden( this ) ) {
            jQuery( this ).show();
        } else {
            jQuery( this ).hide();
        }
    });
}

正如您所看到的,value不属于boolean类型,因此不予考虑,因为对于first,您传递字符串时始终会切换