Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery';s attr()方法行为_Jquery - Fatal编程技术网

jQuery';s attr()方法行为

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"

这不是一个''的问题

考虑使用这种如此简单的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" 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代码,供任何想要测试它的人使用: