jQuery';s attr()方法行为
这不是一个'与'的问题 考虑使用这种如此简单的web表单:jQuery';s attr()方法行为,jquery,Jquery,这不是一个'与'的问题 考虑使用这种如此简单的web表单: <form action="/"> <input type="radio" name="type" value="1" checked> <input type="radio" name="type" value="2" > <input type="radio" name="type" value="3" > <input type="radio"
<form action="/">
<input type="radio" name="type" value="1" checked>
<input type="radio" name="type" value="2" >
<input type="radio" name="type" value="3" >
<input type="radio" name="type" value="4" >
<button type="submit"> Submit </button>
</form>
提交
第一个单选按钮的默认属性是选中的,打开此web表单会显示一幅众所周知的图片:
在一个编写好的jQuery脚本文件中,我试图检查一个单选按钮——但是可以使用prop()
以一种正确且不令人头痛的方式来完成,我使用了attr()
使用浏览器的控制台,我可以立即检查结果:
但我知道我应该在检查所需输入之前取消选中所有输入,以期望得到正确的结果:
争论从这里开始,重复第一步:
我的问题是为什么会这样?单选按钮中没有复选标记,服务器端没有值。问题是特定于jQuery版本的。这根本不是一个bug,也不是jQueryV3Alpha发行版附带的
但是后来,从jQueryV3测试版开始,removeAttr()
有了一些变化
在jQuery<3.*中,removeAttr()
方法将动态/当前状态设置为false:
// Set corresponding property to false
if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
elem[ propName ] = false;
而在另一端,attr()
只设置默认状态(而不是当前状态)。但是在jQuery=3.0中,我们再也看不到这些行了
在除v3.*(>最终版和测试版)之外的所有版本中,我们不能期望从这两行代码中检查单选按钮:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').attr('checked', true);
但这三条线是并排工作的:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').attr('checked', true);
$('input[value="3"]').prop('checked', true);
或者更简单一些:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').prop('checked', true);
(但请注意,某些javascript代码可能会检查属性而不是属性。因此,您必须额外执行.atrr()
)
在早期版本中,最好不要使用removeAttr()
,而只使用attr()
,如下所示:
$('input[name="type"]:checked').attr('checked', false);
$('input[type="3"]').attr('checked', true);
上还讨论了removeAttr()
的这种行为更改
感谢对这个问题发表评论的人。这个问题与jQuery版本有关。这根本不是一个bug,也不是jQueryV3Alpha发行版附带的
但是后来,从jQueryV3测试版开始,removeAttr()
有了一些变化
在jQuery<3.*中,removeAttr()
方法将动态/当前状态设置为false:
// Set corresponding property to false
if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
elem[ propName ] = false;
而在另一端,attr()
只设置默认状态(而不是当前状态)。但是在jQuery=3.0中,我们再也看不到这些行了
在除v3.*(>最终版和测试版)之外的所有版本中,我们不能期望从这两行代码中检查单选按钮:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').attr('checked', true);
但这三条线是并排工作的:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').attr('checked', true);
$('input[value="3"]').prop('checked', true);
或者更简单一些:
$('input[name="type"]').removeAttr('checked');
$('input[value="3"]').prop('checked', true);
(但请注意,某些javascript代码可能会检查属性而不是属性。因此,您必须额外执行.atrr()
)
在早期版本中,最好不要使用removeAttr()
,而只使用attr()
,如下所示:
$('input[name="type"]:checked').attr('checked', false);
$('input[type="3"]').attr('checked', true);
上还讨论了removeAttr()
的这种行为更改
感谢那些对此问题发表评论的人。发布您的jQuerycode@AnkurBhadania这个简单的例子是一个具有给定代码的真实例子。但是没有.js
文件。您使用的jQuery版本是什么?@putvande jQuery v1.12.1代码,对于任何想要测试它的人:发布您的jQuerycode@AnkurBhadania这个简单的例子是一个具有给定代码的真实例子。但是没有.js
文件。您使用的jQuery版本是什么?@putvande jQuery v1.12.1代码,供任何想要测试它的人使用: