为什么此复选框缺少"已选中"属性?

时间:2018-02-16 18:27:39

标签: javascript dom properties

在我写作的一个组件中,我想检查"检查"元素的属性。不幸的是,该元素似乎并未包含"已检查"财产,至少不是我设置的方式。

这是JS片段:

var submenus  = document.querySelectorAll( ".hbm-panel-item-label" );
for ( var label of submenus ) {
  // console.log( "label.for = " + label.getAttribute( "for" ) );

  label.addEventListener( "click", function() {
    var label_for = this.getAttribute( "for" ); 
    // console.log( label_for + " was clicked." );

    var checkboxes = document.querySelectorAll( ".hbm-panel-item-checkbox" );
    for ( var cb of checkboxes ) {
      console.debug( cb );

      if ( cb.getAttribute( "name" ) === label_for ) {
        console.log( label_for + " has attribute 'checked': " + cb.hasAttribute( "checked" ) );
        console.log( label_for + " is " + cb.getAttribute( "checked" ) );  
      }
    }
  });
}

......结果如下:

Firefox console output

当我打开该元素的属性时,我确实看到一个值为" false"的已检查属性:

enter image description here

提前道歉,我是JS新秀。我觉得这很简单。我也觉得如果我使用jQuery,这将花费大约三行代码......

1 个答案:

答案 0 :(得分:1)

属性位于DOM中,属性位于HTML中,解析为DOM。 复选框的HTML没有“已检查”属性,但复选框的属性为“已检查”。 您可能只需要检查

cb.checked

而不是寻找属性。