在单击 jquery 时添加属性“已检查”

Posted

技术标签:

【中文标题】在单击 jquery 时添加属性“已检查”【英文标题】:Add attribute 'checked' on click jquery 【发布时间】:2011-03-25 09:39:33 【问题描述】:

我一直在试图弄清楚如何在单击时将“选中”属性添加到复选框。我想这样做的原因是,如果我选中一个复选框;我可以让我的本地存储将其保存为 html,因此当页面刷新时,它会注意到复选框已选中。截至目前,如果我选中它,它会使父级淡出,但如果我保存并重新加载它会保持淡化但未选中复选框。

我试过 $(this).attr('checked');但是好像不想加checked。

编辑: 阅读 cmets 后,我似乎并不清楚。 我的默认输入标签是:

<input type="checkbox" class="done">

我需要它,所以当我单击复选框时,它会在其末尾添加“已选中”。例如:

<input type="checkbox" class="done" checked>

我需要它来执行此操作,因此当我将 html 保存到本地存储时,当它加载时,它会将复选框呈现为选中状态。

$(".done").live("click", function()
if($(this).parent().find('.editor').is(':visible') ) 
var editvar = $(this).parent().find('input[name="tester"]').val();
$(this).parent().find('.editor').fadeOut('slow');
$(this).parent().find('.content').text(editvar);
$(this).parent().find('.content').fadeIn('slow');

if ($(this).is(':checked')) 
$(this).parent().fadeTo('slow', 0.5);
$(this).attr('checked'); //This line
else

$(this).parent().fadeTo('slow', 1);
$(this).removeAttr('checked');

);

【问题讨论】:

【参考方案1】:

$( this ).attr( 'checked', 'checked' )

只要attr( 'checked' ) 将返回$(this) 的checked 属性的值。要设置它,您需要第二个参数。基于&lt;input type="checkbox" checked="checked" /&gt;

编辑:

基于 cmets,更合适的操作是:

$( this ).attr( 'checked', true )

而且是直接的javascript方法,更合适更高效:

this.checked = true;

感谢@Andy E。

【讨论】:

由于 jQuery 将属性映射到 DOM 属性的方式,$(this).attr('checked', true); 更合适。 this.checked = true; 更合适,效率更高。 @[Andy E] 太酷了。不知道。编辑我的答案以反映。 @hookedonwinter:根据您的更新,我认为不投票是不礼貌的;)+1。 感谢您的回答,但这似乎并不想将“已选中”属性添加到我的复选框中。看来我可以做任何其他事情,“'val',true”等。但是'checked',true不想添加它。 您能详细说明一下吗?也许您可以使用您所拥有的 javascript 代码示例来编辑您的问题。【参考方案2】:

这似乎是使用属性实际上合适的少数情况之一。 jQuery 的attr() 方法对你没有帮助,因为在大多数情况下(包括这个)它实际上设置了一个属性,而不是一个属性,这使得选择它的名字看起来有些愚蠢。 [更新:从 jQuery 1.6.1 开始,the situation has changed slightly]

IE 的 DOM setAttribute 方法存在一些问题,但在这种情况下应该没问题:

this.setAttribute("checked", "checked");

在 IE 中,这实际上总是使复选框被选中。在其他浏览器中,如果用户已经选中和取消选中复选框,则设置该属性将没有可见效果。因此,如果要保证复选框被选中并且具有checked 属性,则还需要设置checked 属性:

this.setAttribute("checked", "checked");
this.checked = true;

要取消选中复选框并删除属性,请执行以下操作:

this.setAttribute("checked", ""); // For IE
this.removeAttribute("checked"); // For other browsers
this.checked = false;

【讨论】:

我喜欢你在这里的东西,但 OP 确实要求使用 jQuery。但是,对于直接 js,+1。很高兴在学习框架之前了解核心。 好吧,我不确定 jQuery 是否真的这样做了。不过可能是错的。 感谢您的帮助,直接 javascript 对我来说绝对没问题,我刚刚使用 jquery,所以我想我会问。再次感谢您的帮助。【参考方案3】:

如果.attr() 不适合您(尤其是在连续选中和取消选中复选框时),请使用.prop() 而不是.attr()

【讨论】:

你的答案是最好的(恕我直言)。函数 .attr() 只是添加属性,但不更新复选框的状态。 .prop() - 帮助我解决了我的问题。【参考方案4】:

使用此代码

var sid = $(this);
sid.attr('checked','checked');

【讨论】:

【参考方案5】:

一个简单的答案是在复选框中添加checked 属性:

$('input[id='+$(this).attr("id")+']').attr("checked", "checked");

【讨论】:

以上是关于在单击 jquery 时添加属性“已检查”的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 给多个含义相同class属性的元素,统一添加单击事件

Jquery 给多个含义相同class属性的元素,统一添加单击事件

如何在 jQuery 中单击时找到 data-* 属性值?

单击时添加和删除类 Jquery

使用 jQuery 检查收音机时,检查收音机是不是已检查不起作用

使用 jquery 在单击时将 html 输入框添加到 div