Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
The problem is that the `input` event is not fired when the slider is changed. The correct event to listen to is the `change` event. Here is the corrected code:
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
Below is a student's answer to a question about what a particular instruction does: The problem is that the `input` event is not fired when the slider is changed. The correct event to listen to is the `change` event. Here is the corrected code:
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
The student fails.
Testing if the previous output contains the string student passes
: False
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
The `input` event is fired when the value of an `<input>` element is changed. The `onchange` event is fired when the value of a `<select>` element is changed. To fix the code, change the event listener from `input` to `change`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
Below is a student's answer to a question about what a particular instruction does: The `input` event is fired when the value of an `<input>` element is changed. The `onchange` event is fired when the value of a `<select>` element is changed. To fix the code, change the event listener from `input` to `change`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
The student fails. The student's answer discusses the difference between the `input` and `change` events and when they are fired, but it does not mention anything about editing the `innerHTML` of an element or how that action affects event listeners. Editing the `innerHTML` of an element can indeed remove any event listeners attached to the child elements because it essentially replaces those elements with new ones, thereby losing the attached event listeners. However, this specific point is not addressed in the student's answer.
Testing if the previous output contains the string student passes
: False
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
The input change event is not `input` but rather `change`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
Below is a student's answer to a question about what a particular instruction does: The input change event is not `input` but rather `change`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
The student fails. The student's answer discusses adding an event listener to an element (in this case, a slider) that listens for a "change" event and then logs the value of the event's target (the slider) to the console when the event occurs. This is fundamentally different from the concept of editing the `innerHTML` of an element, which can remove event listeners attached to child elements of the modified element. The student's answer does not address or relate to the impact of editing `innerHTML` on event listeners at all.
Testing if the previous output contains the string student passes
: False
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
The `onchange` event is not firing because it is not being listened to. To fix this, change the event listener to `onchange` instead of `input`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
Below is a student's answer to a question about what a particular instruction does: The `onchange` event is not firing because it is not being listened to. To fix this, change the event listener to `onchange` instead of `input`.
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
The student fails. The student's answer does not say anything similar to "editing the innerHTML clears event listeners." Instead, the student's answer discusses changing an event listener from listening to an "input" event to listening to a "change" event, which is a different concept.
Testing if the previous output contains the string student passes
: False
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
Why doesn't the slider onchange event fire when I run this code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <body> <script> var candidate_paper_list; class Dropdown { constructor(parent_html, parent_node) { var r = Math.random() parent_html.innerHTML += `<div class="autocomplete-container" style="border: 1px solid #000; padding: 1em"> <label for="search-input">Search Paper Titles:</label> <input type="text" id="search-input-${r}" autocomplete="off"> <div id="autocomplete-results"></div> </div>`; } } class Mul { constructor(parent_html, parent_node) { var div = document.createElement("div"); div.style = "border: 1px solid #000; padding: 1em" parent_html.appendChild(div); var slider = document.createElement("input"); slider.type = "range" slider.id = "foo" slider.min = "0" slider.max = "100" slider.step = ".1" this.slider = slider div.appendChild(slider); this.node = div; div.appendChild(document.createElement("br")); parent_node.child = this; slider.addEventListener("input", (event) => { console.log(event.target.value); }); } serialize() { console.log("VALUE", this.slider.value); console.log("VALUE", this.slider); let positive_papers = ['const_mul', this.child.serialize(), +this.slider.value]; return positive_papers; } } document.body.onload = function() { var mul = new Mul(document.body, {}) root_node = mul; var dropdown = new Dropdown(mul.node, mul); } </script> </body> |
The `onchange` event does not exist for `<input type="range">`. Instead, use the `input` event. Change:
1 2 3 | slider.addEventListener("input", (event) => { console.log(event.target.value); }); |
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
Below is a student's answer to a question about what a particular instruction does: The `onchange` event does not exist for `<input type="range">`. Instead, use the `input` event. Change:
1 2 3 | slider.addEventListener("input", (event) => { console.log(event.target.value); }); |
1 2 3 | slider.addEventListener("change", (event) => { console.log(event.target.value); }); |
The student fails. The student's answer does not address or imply anything about editing the `innerHTML` clearing event listeners. Instead, the student's answer discusses the difference between using the `input` event and the `change` event for an `<input type="range">` element, which is unrelated to the behavior of event listeners in relation to changes in `innerHTML`.
Testing if the previous output contains the string student passes
: False