好吧,这很可能是一个相当愚蠢的问题,但我很难绕过这个......
在页面加载/生成时,我根据实际数据库条目通过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 ...)
我的问题是:这是正常行为吗?我应该简单地忽视不一致吗?我不能来这里的是什么?
感谢您的时间和努力!
答案 0 :(得分:1)
这是完全正常的。您在源中看到的属性是元素的原始状态。底层属性 - prop()
获取/设置 - 可以是不同的。
以下是一个例子:
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;
请注意,即使设置prop('checked', false)
后,attr()
仍然会读取加载页面时出现的checked
属性。
出于这个原因,你应该始终尽可能使用prop()
。