在元素上单击时将CSS类添加到元素,出现一些错误?

AskRahul

鉴于此HTML:
第一行

 <ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">Fail</label>
   </li>
 </ul>
  

HTML:
第二行

 <ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">Fail</label>
   </li>
 </ul>

我正在创建一个JavaScript函数,当用户单击该函数时,它将根据该元素的data-pos属性完美地工作,从而向该元素添加新类。

我尝试了以下JavaScript。它可能会添加完美的课程<li class="List Noah1"><li class="List Liam1">或者<li class="List James1">

第一个问题是它也在输入上添加了不必要的'null1'类。例:<input class="text null1">

第二个问题就此而言,javascript仅在第一行上工作。在第一行之后,它可能无法在同一页面的第二,第三,第四...上运行。我们将此代码添加到codepen https://codepen.io/MrUmang/pen/WNoQvvq

function clickEvent(event) {
  let element = event.target
  if(element.tagName === 'LABEL') {
    element = event.target.parentElement;
  }
  element.classList.add(element.getAttribute('data-pos') + "1")
  console.log(element.classList)
}

document.querySelector('ul').addEventListener('click', clickEvent, false);

function clickEvent(event) {
      let element = event.target
      if(element.tagName === 'LABEL') {
        element = event.target.parentElement;
      }
      element.classList.add(element.getAttribute('data-pos') + "1")
      console.log(element.classList)
    }
   document.querySelector('ul').addEventListener('click', clickEvent, false);
body {
    color: #333;
    background-color: #eaeaea;
    padding: 13px 24px;
}

.List.Noah1:after {
  content:'\2713';
  display:inline-block;
  color:#09a526;
  vertical-align: top;
  padding:0 6px 0 0;
}
.List.Liam1:after {
  content:'\2717';
  display:inline-block;
  color:red;
  vertical-align: top;
  padding:0 6px 0 0;
}
.List.James1:after {
  content:'\2717';
  display:inline-block;
  color:red;
  vertical-align: top;
  padding:0 6px 0 0;
}
hr {
    height: 0px;
    border: 2px solid;
    width: 47%;
    text-align: -webkit-auto;
    display: inline-block;
}
.text {
    border: 0;
    width: 0;
    padding: 0;
}
<ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">Average</label>
  </li>
 </ul>
<hr>
<ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">Average</label>
  </li>
 </ul>
<hr>
<ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James">
      <label><input class="text">Average</label>
  </li>
 </ul>
<hr>
<ul class="myList">
   <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
   </li>
   <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
   </li>
   <li class="List" data-pos="James"> 
      <label><input class="text">Average</label>
  </li>
 </ul>

如何解决这个问题呢?

兰迪·卡斯本

问题是您只在第一个设置处理程序ul

解决方案是包装整个HTML结构。也许与div然后像下面这样在wrapper元素上设置处理程序:

document.querySelector('div').addEventListener('click', clickEvent, false);

这是一个完整的工作解决方案:

function clickEvent(event) {
  let element = event.target
  if (element.tagName === 'LABEL') {
    element = event.target.parentElement;
  }
  element.classList.add(element.dataset.pos + "1")
}
document.querySelector('div').addEventListener('click', clickEvent, false);
body {
  color: #333;
  background-color: #eaeaea;
  padding: 13px 24px;
}

.List.Noah1:after {
  content: '\2713';
  display: inline-block;
  color: #09a526;
  vertical-align: top;
  padding: 0 6px 0 0;
}

.List.Liam1:after {
  content: '\2717';
  display: inline-block;
  color: red;
  vertical-align: top;
  padding: 0 6px 0 0;
}

.List.James1:after {
  content: '\2717';
  display: inline-block;
  color: red;
  vertical-align: top;
  padding: 0 6px 0 0;
}

hr {
  height: 0px;
  border: 2px solid;
  width: 47%;
  text-align: -webkit-auto;
  display: inline-block;
}

.text {
  border: 0;
  width: 0;
  padding: 0;
}
<div>
  <ul class="myList">
    <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
    </li>
    <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
    </li>
    <li class="List" data-pos="James">
      <label><input class="text">Average</label>
    </li>
  </ul>
  <hr>
  <ul class="myList">
    <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
    </li>
    <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
    </li>
    <li class="List" data-pos="James">
      <label><input class="text">Average</label>
    </li>
  </ul>
  <hr>
  <ul class="myList">
    <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
    </li>
    <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
    </li>
    <li class="List" data-pos="James">
      <label><input class="text">Average</label>
    </li>
  </ul>
  <hr>
  <ul class="myList">
    <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
    </li>
    <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
    </li>
    <li class="List" data-pos="James">
      <label><input class="text">Average</label>
    </li>
  </ul>
  <hr>
  <ul class="myList">
    <li class="List" data-pos="Noah">
      <label><input class="text">Pass</label>
    </li>
    <li class="List" data-pos="Liam">
      <label><input class="text">Fail</label>
    </li>
    <li class="List" data-pos="James">
      <label><input class="text">Average</label>
    </li>
  </ul>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我将点运算符添加到Htaccess时出现一些错误

来自分类Dev

将类(悬停时)添加到目标池中,但不添加到悬停的元素上

来自分类Dev

单击时,将类添加到HTML列表中的一个且只有一个元素

来自分类Dev

有没有一种方法可以在拖动光标和鼠标单击时将CSS类添加到DOM元素?

来自分类Dev

单击嵌套元素将类添加到同级

来自分类Dev

jQuery将类添加到此单击的元素

来自分类Dev

将类添加到鼠标单击时鼠标悬停的所有元素

来自分类Dev

单击 actionButton 后将 css 添加到元素

来自分类Dev

jQuery,单击时将 css 规则添加到特定元素

来自分类Dev

将元素添加到 Python 列表时出现“AttributeError”

来自分类Dev

java8映射如何简单地将一些元素添加到列表值

来自分类Dev

将元素添加到具有与单击元素相同的匹配类的元素

来自分类Dev

将元素添加到std :: map时出现段错误

来自分类Dev

尝试将元素添加到NSUserDefaults时出现App Delegate奇怪错误

来自分类Dev

将类添加到悬停时共享类的另一个元素

来自分类Dev

在屏幕顶部时,将类添加到元素

来自分类Dev

在屏幕顶部时,将类添加到元素

来自分类Dev

jQuery将CSS类添加到父<ul>元素

来自分类Dev

将CSS类添加到Angularjs中的标记元素

来自分类Dev

依次将CSS类添加到div元素

来自分类Dev

输入无效时,Angular是否可以将CSS类添加到父/兄弟元素

来自分类Dev

输入无效时,Angular是否可以将CSS类添加到父级/同级元素

来自分类Dev

单击按钮后将一些内容添加到文本字段

来自分类Dev

想要在元素上单击时添加CSS类

来自分类Dev

将类添加到父元素

来自分类Dev

将类添加到erb元素

来自分类Dev

将类添加到后续元素

来自分类Dev

无法将类添加到元素

来自分类Dev

将类添加到槽元素 (?)

Related 相关文章

  1. 1

    我将点运算符添加到Htaccess时出现一些错误

  2. 2

    将类(悬停时)添加到目标池中,但不添加到悬停的元素上

  3. 3

    单击时,将类添加到HTML列表中的一个且只有一个元素

  4. 4

    有没有一种方法可以在拖动光标和鼠标单击时将CSS类添加到DOM元素?

  5. 5

    单击嵌套元素将类添加到同级

  6. 6

    jQuery将类添加到此单击的元素

  7. 7

    将类添加到鼠标单击时鼠标悬停的所有元素

  8. 8

    单击 actionButton 后将 css 添加到元素

  9. 9

    jQuery,单击时将 css 规则添加到特定元素

  10. 10

    将元素添加到 Python 列表时出现“AttributeError”

  11. 11

    java8映射如何简单地将一些元素添加到列表值

  12. 12

    将元素添加到具有与单击元素相同的匹配类的元素

  13. 13

    将元素添加到std :: map时出现段错误

  14. 14

    尝试将元素添加到NSUserDefaults时出现App Delegate奇怪错误

  15. 15

    将类添加到悬停时共享类的另一个元素

  16. 16

    在屏幕顶部时,将类添加到元素

  17. 17

    在屏幕顶部时,将类添加到元素

  18. 18

    jQuery将CSS类添加到父<ul>元素

  19. 19

    将CSS类添加到Angularjs中的标记元素

  20. 20

    依次将CSS类添加到div元素

  21. 21

    输入无效时,Angular是否可以将CSS类添加到父/兄弟元素

  22. 22

    输入无效时,Angular是否可以将CSS类添加到父级/同级元素

  23. 23

    单击按钮后将一些内容添加到文本字段

  24. 24

    想要在元素上单击时添加CSS类

  25. 25

    将类添加到父元素

  26. 26

    将类添加到erb元素

  27. 27

    将类添加到后续元素

  28. 28

    无法将类添加到元素

  29. 29

    将类添加到槽元素 (?)

热门标签

归档