How can I make javascript apply to list of elements?
up vote
1
down vote
favorite
I want to flip cards in the browser. The elements are rendered with a Django template for loop. I'm able to flip the first card, but not the rest. I want them to flip individually.
Here's html:
{% for element in elements %}
<div class="outer">
<div class="inner">
<div class="card-back">
<span>{{ content }}</span>
</div>
<div class="card-front">
<span>{{ content }}</span>
</div>
</div>
</div>
{% endear %}
Here's javascript:
# works for the first element
var card = document.querySelector('.inner');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});
# this function seems to break things
function() {
var cards = document.querySelectorAll(".inner");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener(card);
}
});
javascript html django
add a comment |
up vote
1
down vote
favorite
I want to flip cards in the browser. The elements are rendered with a Django template for loop. I'm able to flip the first card, but not the rest. I want them to flip individually.
Here's html:
{% for element in elements %}
<div class="outer">
<div class="inner">
<div class="card-back">
<span>{{ content }}</span>
</div>
<div class="card-front">
<span>{{ content }}</span>
</div>
</div>
</div>
{% endear %}
Here's javascript:
# works for the first element
var card = document.querySelector('.inner');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});
# this function seems to break things
function() {
var cards = document.querySelectorAll(".inner");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener(card);
}
});
javascript html django
1
What doesclickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note thatfunction () { })
is invalid syntax and would not ever get called
– charlietfl
Nov 10 at 21:20
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I want to flip cards in the browser. The elements are rendered with a Django template for loop. I'm able to flip the first card, but not the rest. I want them to flip individually.
Here's html:
{% for element in elements %}
<div class="outer">
<div class="inner">
<div class="card-back">
<span>{{ content }}</span>
</div>
<div class="card-front">
<span>{{ content }}</span>
</div>
</div>
</div>
{% endear %}
Here's javascript:
# works for the first element
var card = document.querySelector('.inner');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});
# this function seems to break things
function() {
var cards = document.querySelectorAll(".inner");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener(card);
}
});
javascript html django
I want to flip cards in the browser. The elements are rendered with a Django template for loop. I'm able to flip the first card, but not the rest. I want them to flip individually.
Here's html:
{% for element in elements %}
<div class="outer">
<div class="inner">
<div class="card-back">
<span>{{ content }}</span>
</div>
<div class="card-front">
<span>{{ content }}</span>
</div>
</div>
</div>
{% endear %}
Here's javascript:
# works for the first element
var card = document.querySelector('.inner');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});
# this function seems to break things
function() {
var cards = document.querySelectorAll(".inner");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener(card);
}
});
javascript html django
javascript html django
asked Nov 10 at 21:17
Whodini
31612
31612
1
What doesclickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note thatfunction () { })
is invalid syntax and would not ever get called
– charlietfl
Nov 10 at 21:20
add a comment |
1
What doesclickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note thatfunction () { })
is invalid syntax and would not ever get called
– charlietfl
Nov 10 at 21:20
1
1
What does
clickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note that function () { })
is invalid syntax and would not ever get called– charlietfl
Nov 10 at 21:20
What does
clickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note that function () { })
is invalid syntax and would not ever get called– charlietfl
Nov 10 at 21:20
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
According to Mozilla documentation, document.querySelector returns an Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
This is why it works only for the first element.
If you want to apply this on all elements, you can use jQuery and register the event when the page is fully loaded.
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").click(function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
Please know that you don't need the function with the foor loop, as jQuery will automatically apply the click event whenever a new element is added.
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
|
show 1 more comment
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
According to Mozilla documentation, document.querySelector returns an Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
This is why it works only for the first element.
If you want to apply this on all elements, you can use jQuery and register the event when the page is fully loaded.
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").click(function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
Please know that you don't need the function with the foor loop, as jQuery will automatically apply the click event whenever a new element is added.
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
|
show 1 more comment
up vote
1
down vote
accepted
According to Mozilla documentation, document.querySelector returns an Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
This is why it works only for the first element.
If you want to apply this on all elements, you can use jQuery and register the event when the page is fully loaded.
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").click(function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
Please know that you don't need the function with the foor loop, as jQuery will automatically apply the click event whenever a new element is added.
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
|
show 1 more comment
up vote
1
down vote
accepted
up vote
1
down vote
accepted
According to Mozilla documentation, document.querySelector returns an Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
This is why it works only for the first element.
If you want to apply this on all elements, you can use jQuery and register the event when the page is fully loaded.
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").click(function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
Please know that you don't need the function with the foor loop, as jQuery will automatically apply the click event whenever a new element is added.
According to Mozilla documentation, document.querySelector returns an Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
This is why it works only for the first element.
If you want to apply this on all elements, you can use jQuery and register the event when the page is fully loaded.
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").click(function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
Please know that you don't need the function with the foor loop, as jQuery will automatically apply the click event whenever a new element is added.
edited Nov 10 at 22:04
answered Nov 10 at 21:44
Amine Messaoudi
450314
450314
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
|
show 1 more comment
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
1
1
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
Thanks for answering Amine. I'm tinkering with it now...
– Whodini
Nov 10 at 22:02
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
I have updated my answer
– Amine Messaoudi
Nov 10 at 22:04
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
Still not working. I think your code works all except the event.target part. Doesn't seem to be calling anything. When I replace that with var card = document.querySelector('.inner'); clicking any card will flip the first one. So it's close...
– Whodini
Nov 10 at 22:16
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
When you run my code, is there any warnings/errors in console ? Because I tested it in my computet and its working fine
– Amine Messaoudi
Nov 10 at 22:19
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
Ah ok I got it. Instead of this: card.classList.toggle('is-flipped'); I used this.classList.toggle('is-flipped'); and it worked. Thanks Amine.
– Whodini
Nov 10 at 22:20
|
show 1 more comment
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243496%2fhow-can-i-make-javascript-apply-to-list-of-elements%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
What does
clickListener()
do and what errors are thrown in browser console? Those error messages are important clues. Note thatfunction () { })
is invalid syntax and would not ever get called– charlietfl
Nov 10 at 21:20