jQuery .prop(' checked',false)不起作用

时间:2014-06-27 04:38:50

标签: javascript jquery html prop

HTML:

<form class="form">
    <input type="checkbox" id="box" /> Check Me!
</form>

JS:

$( window ).load( function() {

    var myFunc = function() {

        if( $( '#box' ).prop( 'checked', false ) ) {
            $( '.form' ).append( '<p>Checkbox is not checked.</p>' );
        }

    }

    $( '#box' ).on( 'change', myFunc );

} );

这是一个JSFiddle http://jsfiddle.net/3PYm7/

当我使用$( '#box' ).prop( 'checked', false )作为if语句的条件时,它不起作用,但! $( '#box' ).prop( 'checked' )效果很好!

7 个答案:

答案 0 :(得分:21)

语句$('#box').prop('checked', false)不返回布尔值,而是将checked属性设置为false,因此不应在条件中使用并且正常行为

if($('#box').prop('checked', false))

可以使用is()选择器{/ 1}}进行测试。

:checked

if($('#box').is(':checked'))

您可以使用原生javascript

获得最佳效果
if($('#box:checked').length)

您提到的工作语句if(document.getElementById('box').checked) 将返回已检查的属性值,而不是设置。

答案 1 :(得分:4)

  if ($('#box').prop('checked')==false) {
      $('.form').append('<p>Checkbox is not checked.</p>');
  }

答案 2 :(得分:2)

是的,这是一个众所周知的,

$('#box').prop('checked', false)是一个setter版本,它将返回已调用.prop()方法的元素,而不是布尔结果。您应该使用getter版本来获取布尔值$('#box').prop('checked')

请在此处了解有关.prop(property)

的更多信息

答案 3 :(得分:2)

试试这个

if($('#box').is(':checked')) // this will return true or false

答案 4 :(得分:2)

与使用setter which does not return a boolean测试资产相比,您遇到的问题更多。

修复后,您的代码将在每次取消选中时附加消息。

我建议这个

Live Demo

$(function() {
   $('#myform').on("submit", function(e) {
     var checked = $('#box').is(":checked");
     $('#pleaseCheckBoxMessage').toggle(!checked);
     if (!checked) {
       e.preventDefault(); // stop submission
     }
  });
  $("#box").on("click",function() {
    $('#pleaseCheckBoxMessage').toggle(!this.checked);
  });  
});

答案 5 :(得分:0)

尝试这样。这也是检查

的另一种方法
if (!$('#box').prop('checked')) {
        $('.form').append('<p>Checkbox is not checked.</p>');
    }

Updated Demo

$('#box').prop('checked')复选框更改后,它将返回true或false

答案 6 :(得分:0)

这是jQuery的一个普遍问题,我的想法是通过jQuery获取和设置一个值具有相同的函数名称,但这对新手来说非常混乱。

例如.val(&#39; bla&#39;)设置值bla但是.val()返回当前值...这对于attr,prop,...和它们中的每一个几乎相同有一个StackOverflow问题,因为有人不明白它应该如何工作。如果它被称为getProp,setProp,这些问题将不存在。