使用切换将属性添加到复选框“已选中”

时间:2015-06-29 11:49:13

标签: javascript jquery html

我对javascript或jQuery不太熟悉。我希望在其值更改时在复选框上添加和删除checked 属性,以便在我们获取复选框的HTML时包含该属性(我们存储此HTML并且需要要存储的状态)。这是我尝试过的:

$(document).on('click','.mark-as-done',function()
{
    if($(this).prop("checked"))
    {
        $(this).removeAttr('checked');
    }
    $(this).attr('checked','checked');
});

HTML:

<input type="checkbox" name="task" class="mark-as-done" style=" float: left;margin-top: 13px;">

1 个答案:

答案 0 :(得分:2)

jQuery对具有反射属性的属性(如checked)进行了特殊处理,因此您需要直接使用DOM来执行此操作。此外,您的逻辑始终添加属性(因为您在删除时没有使用elsereturn)。

但是DOM也很容易:

$(document).on("click", ".mark-as-done", function() {
  // Actually add/remove the attribute, so that it's in the serialized
  // form when we store it (the `value` *property* isn't included when
  // serializing, so we do the attribute)
  if (this.checked) {
    this.setAttribute("checked", "checked");
  } else {
    this.removeAttribute("checked");
  }
  snippet.log(this.outerHTML);
});
<input type="checkbox" class="mark-as-done">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

在Chrome,Firefox,IE9和IE11上测试。