jQuery .prop('已检查')未更改HTML

时间:2017-05-17 08:36:27

标签: javascript php jquery html forms

好吧,这很可能是一个相当愚蠢的问题,但我很难绕过这个......

在页面加载/生成时,我根据实际数据库条目通过PHP将checked="checked"添加到<input type="checkbox" value="1">

在使用表单时,我正在通过Javascript / jQuery读取输入的已检查状态,以便(AJAX-)提交表单并更新数据库条目。

问题在于,即使我的JS评估_this.is(':checked')返回false,实际的HTML / DOM表示仍会显示已检查的属性<input type="checkbox" value="1" checked="checked">

我知道我可以.removeAttr('checked')但这没有意义(一切正常),也不推荐(见this SO question ...)

我的问题是:这是正常行为吗?我应该简单地忽视不一致吗?我不能来这里的是什么?

感谢您的时间和努力!

1 个答案:

答案 0 :(得分:1)

这是完全正常的。您在源中看到的属性是元素的原始状态。底层属性 - prop()获取/设置 - 可以是不同的。

以下是一个例子:

&#13;
&#13;
var $cb = $(':checkbox');

console.log('attr: ' + $cb.attr('checked'), 'prop: ' + $cb.prop('checked'));

$cb.prop('checked', false);

console.log('attr: ' + $cb.attr('checked'), 'prop: ' + $cb.prop('checked'));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" value="1" checked="checked" />
&#13;
&#13;
&#13;

请注意,即使设置prop('checked', false)后,attr()仍然会读取加载页面时出现的checked属性。

出于这个原因,你应该始终尽可能使用prop()