Event listener for select element in Vanilla JavaScript triggers just one time

I'm working with an ecommerce platform that limits my access to HTML code, but allows me to add custom JS and CSS. I need to modify the shipping information text next to the 'Doba dodania' text. The problem is that the event only triggers once and not on every select change event. Can anyone help me figure out why it's only firing once? I had to use SetTimeOut as a workaround.

Here is the link to the page and console logs for reference:

My code snippet:

<script type="text/javascript">

function change_doba_dodania() {
var c757_counter = document.querySelectorAll(".c757").length;
var variant = document.querySelectorAll(".c755.variant").length;
var out_of_stock = document.querySelectorAll(".c757.out-of-stock").length;
console.log(c757_counter);
console.log(variant);
console.log(out_of_stock);

if (out_of_stock > 0) {
    console.log("Out of stock");
}

if ((c757_counter >= 2) && (out_of_stock == 0)) {
    var dd_text = document.getElementsByClassName("c757")[1].innerHTML;
    console.log(dd_text);
    var dd_text_array = dd_text.split(" ");
    var dd_final = dd_text_array.filter(String);
    console.log(dd_final);

    if (dd_final[2] == "zajtra") {
        document.getElementsByClassName("c757")[1].innerHTML = dd_final[6] + " " + dd_final[7] + " " + dd_final[8] + " " + dd_final[9] + " " + dd_final[10] + " and your shipment will be dispatched on " + dd_final[2];
    } else {
        document.getElementsByClassName("c757")[1].innerHTML = dd_final[6] + " " + dd_final[7] + " " + dd_final[8] + " - " + dd_final[9] + " and your shipment will be dispatched on " + dd_final[2];
    }
}
}



window.addEventListener('DOMContentLoaded', (event) => {
change_doba_dodania();
});

var variant = document.querySelectorAll(".c755.variant").length;

if (variant > 0){
document.querySelector('.c757 select').addEventListener('change', function() 
{setTimeout(change_doba_dodania, 1500)});

document.querySelector('.c757 select').addEventListener('change',() => 
    setTimeout(console.log, 1000, "Changed")
) 
}

Answer №1

If I understand your issue correctly, the culprit is the querySelector method.

The querySelector function only targets the first element with the specified class name. To target all elements with the same class name, you will need to utilize querySelectorAll.

document.querySelectorAll(".c757 select").forEach(select => {
    select.addEventListener(...)
})

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Who is responsible for the addition of this wrapper to my code?

Issue with Sourcemaps in Angular 2 TypeScript App Currently, I am working on an Angular 2 app using TypeScript, and deploying it with the help of SystemJS and Gulp. The problem arises when I try to incorporate sourcemaps. When I use inline sourcemaps, eve ...

Tips for sharing a React component with CSS modules that is compatible with both ES Modules and CommonJs for CSS modules integration

Some frameworks, like Gatsby version 3 and above, import CSS modules as ES modules by default: import { class1, class2 } from 'styles.modules.css' // or import * as styles from 'styles.modules.css' However, other projects, such as Crea ...

Is it possible for me to connect one element to another using CSS or JavaScript?

On my website, there are three columns of interactive elements that can be scrolled vertically. Users are able to select one item from each column, and once selected, the chosen elements are connected by lines. The challenge I am facing is determining ho ...

(node:19502) UnresolvedPromiseRejectionNotification: Promise rejection not handled (rejection id: 1): TypeError: Unable to access property 'indexOf' of undefined

I successfully integrated cucumber with nightwatch.js. Here is a snippet of my package.json file: { "name": "learning-nightwatch", "version": "1.0.0", "description": "learning nightwatch", "license": "UNLICENSED", "scripts": { "nightwatch": ...

The function is not executing within the window.plugins context in the Angular/Ionic platform

Problem: I am facing an issue with storing a picture in base 64 format. The window.plugins.Base64.encodeFile method is not functioning as expected. I have successfully installed the Cordova Plugin locally and the $cordovaImagePicker is working fine. Howe ...

Leveraging .position() in jQuery

Check out my script here that needs some adjustments in the positioning of the text. When you click on one of the choices, the text should smoothly slide down to that specific height. I am attempting to utilize .position() to determine a relative position, ...

Exploring the process of building a JavaScript function inside a JSON object using Gson

Can Gson generate JSON that includes a JavaScript function without a key nested within? { autosave: { save( editor ) { return editor.saveData( editor.id, editor.getData() ); }, waitingTime: 2000 } Appreciate any hel ...

Error API0005 has occurred due to an invalid signature connection when trying to establish a connection between Google Apps Script

Currently, I am attempting to showcase various data points from my BitStamp account on a Google Spreadsheet. To accomplish this task, the Google Apps Script (GAS) that utilizes JavaScript is being utilized. The issue at hand involves an error with code AP ...

What is the reason for NextJS/React showing the message "You probably didn't export your component from the file where it was declared"?

What's the Issue The error code I am encountering Warning: React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the ...

Accessing an array from another method within the JavaScript class

Hello everyone, I am new to JavaScript and have a question about calling an array from another function within the same class. Here is an example code snippet: class Something { constructor () {} async functionA () { this.list = [] } a ...

Retrieve an entire item from a single data point

I am currently developing a ticket system and I am looking to implement a feature that allows users to close a ticket, removing it from their account. In my MongoDB array, the structure of the tickets is as follows: { "tickets": [{ &q ...

Unable to dynamically add class during rendering - React/Gatsby

I have the following component set up: const displayImage = false; ... <PostsGrid posts={filteredPosts} defaultCoverImage={defaultCoverImage} imageDisplay={displayImage} /> PostGrid.js ... console.log(displayImage)// ...

Using json_encode in PHP results in nullification of HTML strings

I am working with an array that includes a string containing HTML tags as one of its elements. As I loop through the array and output the field, I can see the string. $positions = $jobs_dbc->getData($sql); foreach($positions as $position) { ...

modifying the click state using a variable in jquery

Something feels off about my approach to this task. I currently have a series of hyperlinks, and when they are clicked, they go through a short sequence before changing states. When clicked again, they revert to their original state. var favourites = fun ...

Creating a JSON object with dynamic values and multiple nested arrays can be achieved by following specific steps

Seeking a way to generate dynamic JSON by utilizing values retrieved from data-attributes. Interested in incorporating a multi-level array within the object as well. For instance: HTML: <div data-color="red" data-type="honda"> </div> JavaSc ...

How to trigger a horizontal scroll on load for a specific ID in HTMLDivElement

Looking for advice on how to make one of the horizontally scrolling DIV containers on a site scroll to a specific position onLoad. The challenge is that this particular container is located far down the page vertically, and we want it to scroll horizontall ...

Discover the XPath of a post on a Facebook page with the help of HtmlUnit

I am trying to fetch the xpath of a Facebook post using HtmlUnit. To better understand my goal, you can check out these two related questions: Supernatural behaviour with a Facebook page HtmlUnit commenting out lines of Facebook page To replicate my pro ...

What a great method to execute a button click within the same button click using jQuery!

Here's an example of code that attempts to make an ajax call when a user clicks a button. If the ajax call fails, the button should be reclicked. I've tried this code below, but it doesn't seem to work. $("#click_me").click(function(){ ...

What is preventing jQuery UI from detecting jQuery?

I have successfully created a JavaScript widget that is capable of being embedded on any third-party website, in any environment. The widget relies on jQuery and jQuery UI for its functionality. After following the guidelines outlined in How to embed Javas ...

Error Encountered with Custom Ajax File Uploader's .AjaxSubmit() Function

I am working on a multipart form that allows users to upload images using AJAX. Here is the HTML code: <form name="mainform" id="mainform" class="form_step" action="" method="POST" enctype="multipart/form-data"> <!-- This image acts li ...