Reputation: 5169
I can't edit my HTML but I wanted to store a variable of the anchor within a list item so that I can make an onclick
event.
At the moment nothing seems to work and I'm assuming it's probably the querySelectorAll
being used incorrectly. Help appreciated.
//set the link class on nav items
var link = document.querySelectorAll('.nodiv a');
console.log(link);
link.onclick = function(e) {
e.preventDefault();
alert("clicked!");
}
<ul>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
</ul>
Upvotes: 0
Views: 45
Reputation: 7250
querySelectorAll
returns a node list, so you have to loop through the list to get the actual nodes.
//set the link class on nav items
var link = document.querySelectorAll('.nodiv a');
console.log(link);
for (var i = 0; i < link.length; i++) {
link[i].onclick = function (e) {
e.preventDefault();
alert('clicked!');
}
}
<ul>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
</ul>
Upvotes: 2
Reputation: 4951
You tried to add the onclick
function to an array of elements. You need to set it to one single element like this:
//set the link class on nav items
var link = document.querySelectorAll('.nodiv a');
console.log(link);
for(var i=0;i<link.length;i++) {
link[i].onclick = function(e) {
e.preventDefault();
alert("clicked!");
}
}
<ul>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
<li class="nodiv"><a href="#">Link</a></li>
</ul>
Upvotes: 0