# 问题描述

使用<input type="radio"/>时候,想通过点击li来改变元素的checked属性,却在点击几次(不确定)后checked不生效的情况。大概例子如下

html语句

<ul id="list">
    <li>
    <input class="check-css" type="radio" value="male"/>
    </li>
    <li>
    <input class="check-css" type="radio" value="female"/>
    </li>
</ul>

css语句

.check-css{
    background-image: url('no-selected.png')
}
.check-css:checked{
    background-image: url('selected.png')
}

js语句

    $('#list li').on('click', function() {
      if($(this).find('input').val() == 'male'){
          $(this).find('input').attr('checked', 'checked')
      }else{
          $(this).find('input').removeAttr('checked')
      }
    })

# 原因分析

因为checked是input元素自带的属性,使用attr可能会返回undefined导致出错。

# 解决办法

使用prop来改变checked

 $('#list li').on('click', function() {
      if($(this).find('input').val() == 'male'){
          $(this).find('input').prop('checked', true)
      }else{
          $(this).find('input').prop('checked', false)
      }
    })

# 总结

  • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
  • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

# 又一特殊情况

获取label的值

// js语法
var labelVal = document.getElementById('mlabel').innerText
// jquery语法
let labelVal = $('#mlabel').html()

给label赋值

// js语法
let mlabel = document.getElementById('mlabel')
mlabel.innerText='66666666'

// jquery语法
mlabel.html('88888888')
# 备注:这两句总结来自文章prop和attr