首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于html-5数据属性选择带有javascript的复选框。

基于html-5数据属性选择带有javascript的复选框。
EN

Stack Overflow用户
提问于 2015-03-31 14:50:51
回答 3查看 7.1K关注 0票数 5

此代码不起作用:

代码语言:javascript
复制
function autoScrub() {
  checkLength = document.querySelectorAll("input[type=checkbox]");
  for (var i=0; i < checkLength.length; i++) {
    if (checkLength[i].attr('data-z') === 1) {
      checkLength[i].checked = true;
    }
  }
}

我的每个复选框都有一个data-z属性,即1或0。我想自动检查所有data-z属性为1的复选框。由于显然我不能这样读取数据属性,所以if (checkLength[i].attr('data-z') === 1) {的代码正在中断。

除此之外,其他代码也可以正常工作。我可以使用checkLength[i].checked = true;,它将检查所有的复选框,只是不能在if语句中正确引用其数据属性,而且我不知道如何引用。

有什么想法吗?

更新

我把下面的两个解决方案搞得乱七八糟,最后想出了:

代码语言:javascript
复制
function autoScrub() {     
  $("input:checkbox").each(function() {
    if ($(this).data("z") == 0) {      
        $(this).prop('checked', true).trigger('change');                                        
    } 
  }); 
} 

而且这起作用了。谢谢大家的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-31 14:51:56

DOM元素节点没有.attr()方法。我想你是在找.getAttribute()

代码语言:javascript
复制
if (checkLength[i].getAttribute('data-z') === "1") {
  checkLength[i].checked = true;
}

还要注意的是,属性值将是字符串,而不是数字,因此您需要像上面编辑的那样将字符串进行比较,或者与==进行比较。

由于您使用jQuery标记标记了您的帖子,所以如果您要走这条路线,那么您的代码将如下所示:

代码语言:javascript
复制
$("input:checkbox").each(function() {
  if ($(this).data("z") == 1)
    this.checked = true;
});
票数 6
EN

Stack Overflow用户

发布于 2015-03-31 15:03:58

在jQuery中,这是一行代码:

代码语言:javascript
复制
$('input[type="checkbox"][data-z="1"]').prop('checked', true);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" data-z="1" /><br />
<input type="checkbox" data-z="0" /><br />
<input type="checkbox" data-z="1" /><br />
<input type="checkbox" data-z="1" /><br />
<input type="checkbox" data-z="0" /><br />

编辑

刚刚注意到一条关于触发更改事件的评论:

代码语言:javascript
复制
$('input[type="checkbox"][data-z="1"]').prop('checked', true).trigger('change');

https://api.jquery.com/trigger/

票数 9
EN

Stack Overflow用户

发布于 2015-03-31 14:56:03

如果您想使用纯html5,那么使用HTMLElement.dataset

代码语言:javascript
复制
//  el.dataset.dateOfBirth = '1960-10-03'; // set the DOB.

// 'someDataAttr' in el.dataset === false

//  el.dataset.someDataAttr = 'mydata';
// 'someDataAttr' in el.dataset === true


(function autoScrub() {
  var el = document.querySelectorAll("input[type=checkbox]");
  
  for (var i=0; i < el.length; i++) {
    console.log(el[i].dataset.z)
    if (el[i].dataset.z === "1") {
      console.log(el[i]);
      el[i].checked = true;
    }
  }
})();
代码语言:javascript
复制
<input type=checkbox id=check-1 data-id=111111 data-user=john data-date-of-birth=2jan2010 data-z=1 />
<input type=checkbox id=check-2 data-id=222222 data-user=tambo data-date-of-birth=3feb2011 data-z=2 />
<input type=checkbox id=check-3 data-id=333333 data-user=sandra data-date-of-birth data-z=3 />
<input type=checkbox id=check-4 data-id=444444 data-user=loic data-date-of-birth=4mar2012 data-z=4 />

注:访问数据

W3C HTML5规范为在JavaScript中收集数据提供了一个清晰的方法。注意,我们不需要像getAttribute那样在值前面使用“data-”;我们只是直接调用值名。该访问方法符合规范,但与许多HTML5特性一样,它只在HTML5浏览器中工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29371597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档