Given this HTML:
1st Row
<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:
2nd Row
<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>
I am create a JavaScript function that will add new class to an element when the user clicks on it, based on the data-pos attribute of the element its Working perfect.
I tried the following javascript. it may add perfect class <li class="List Noah1">
or <li class="List Liam1">
or <li class="List James1">
1st problem are it is also add unnecessary 'null1' class on input. example: <input class="text null1">
2nd Problem are on this whole javascript are working on 1st row only. after 1st row it may not working on 2nd,3rd,4th,... on same page. we are add this code to 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>
how to solve this problem?