Is there a way to add an extra close button to my modal besides the one on the top left corner?

I'm looking to enhance the functionality of the modal by adding an additional "Cancel" button at the bottom, alongside the option to close the modal using the span. I'm seeking guidance on how to proceed with this enhancement. Any suggestions would be greatly appreciated. Thank you.

<!-- The Offer Modal-->
<!-- Trigger/Open The Modal -->
<button id="makeOfferBtn">Make an Offer</button>
<!-- The Offer Modal content -->
<div id="myOfferModal" class="modal">
    <!-- Modal content -->
    <div class="modal-content">
        <span class="close">&times;</span>
        
        <button id="cancelBtn">Cancel</button> <!-- New Cancel Button -->
        
    </div>
</div>


<script>
// Get the modal
var modal = document.getElementById('myOfferModal');

// Get the button that opens the modal
var btn = document.getElementById("makeOfferBtn");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
var cancelBtn = document.getElementById("cancelBtn"); // Get reference to new Cancel button

// Functionality for new Cancel button
cancelBtn.onclick = function() {
    modal.style.display = "none";
}

// When the user clicks the button, open the modal 
btn.onclick = function() {
    modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
    modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
        modal.style.display = "none";
    }
}
</script>

Answer №1

Here is a simple example that demonstrates how to handle multiple buttons with the `close` class using JavaScript:

// Get all elements with the class name 'close'
var closeButtonElements = document.querySelectorAll('.close');

// Loop through each element and add a click event listener
for (var i = 0; i < closeButtonElements.length; i++) {
    var closeBtn = closeButtonElements[i];
    closeBtn.addEventListener('click', function() {
        modal.style.display = 'none';
    });
}

If you want to improve your code, consider reducing the number of global variables for better organization.

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

The responsive navigation menu in React Bulma is malfunctioning and not behaving as anticipated

I'm having trouble with toggling the mobile navigation bar when clicking the button. I am working on a project using Bulma CSS framework with React. Below is the component for the React nav bar: const Header = (props) => { const dispatch = useDis ...

Increasing the size of a div container based on the position of the cursor on the

I recently stumbled upon a fantastic website where two images slide left and right based on mouse movement. When the cursor is on the right, the right part of the image expands, and when it's on the left, the left part expands. You can check out the ...

How to customize nouislider appearance using Bootstrap styles

I've been attempting to style the noUi tooltips to match the bootstrap design, but I've been unsuccessful so far. I'm wondering if there's an easy way to achieve this. I tried to structure the markup based on the bootstrap template ava ...

Disregard the need for synchronization with $http, but remember to consider it for

Is there a way to prevent synchronization with HTTP requests in an Angular app? I am working on a form that should be disabled while the POST request is in progress. I want to write specifications to ensure that the form remains disabled during this time. ...

Tips for properly formatting large numbers

I am facing a challenge with handling large numbers in my JavaScript code. I came across the nFormatter function for formatting large numbers but I am unsure how to integrate it into my existing code. Below is the nFormatter function that I found: functi ...

React virtual list module: Scrolling down through code commands

In my React Grid with Virtual Scrolling, I am facing a challenge with the lack of a "scroll to row feature." At times, I need to select a specific row programmatically and ensure that it is displayed to the user. Although I have the ID of the desired row ...

Querying MongoDB with Mongoose to find objects in an array based on a specific date stored

I am currently working on constructing a mongoose query to retrieve records that match a specific date. It seems like the query is functioning properly, but I'm not getting any results displayed because the date stored in my array of objects is a stri ...

Unsynchronized AJAX POST requests fail to function effectively

I am encountering an issue with an AJAX call that I am using to log in a user. Here is the code: function loginUser() { var xmlhttp; if(window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest() ...

What is the best way to iterate through a designated key in every object within a JSON dataset and store it in a variable called `data` for use with

I am looking to create a line chart displaying stock prices, utilizing JSON data to populate the chart. Let's say I have some JSON data: [ { "close": 116.59, "high": 117.49, "low": 116.22, "open& ...

Chrome Extension: Despite adding it to web_accessible_resources, the resource remains unavailable

I'm currently developing a Chrome Extension with React/Redux and utilizing Webpack. As part of the optimization process, I have started migrating resources to a separate file using the WebPack DLLReference plugin. After generating the dll/dll.vendor. ...

Exploring VueJS Router History Mode with NGinx web server

After conducting research, I discovered several issues similar to the one I am facing. Currently, I have a docker-compose setup on Digital Ocean with NGinx, VueJS, and a Static Landing Page. Everything was working fine until I added a new route with a fo ...

The Dropdown Menu is displaying correctly in Chrome, but is being obscured by an image in Safari

While the Nav dropdown menu functions correctly in Chrome, an issue arises in Safari where the image covers the rest of the menu. This discrepancy between browsers is puzzling. Why does this problem only occur in Safari when it displays properly in Chrome? ...

Is there a way to generate a modal list of values by utilizing bootstrap and angular, while incorporating spring boot as the backend technology?

I'm working on developing a generic "List of Values" feature, which will be a searchable modal containing a natural identifier and description. I have successfully built an AngularJS application in Spring Boot to accomplish this task, but unfortunatel ...

Upon sending a POST request, an UnhandledPromiseRejectionWarning was triggered due to an unhandled promise

Whenever I try to make a post request, I keep encountering this particular error message: UnhandledPromiseRejectionWarning: Unhandled promise rejection. If anyone out there can shed some light on why this issue is occurring, I would be extremely grateful ...

Is it possible to make asynchronous calls to an external API without causing any drag on the overall speed of the website?

Currently, I operate an online store where at the end of the page, I integrate the eBay API with items related to the main product. Unfortunately, I have noticed that this integration causes a significant delay in the overall page loading by 4 to 10 secon ...

Managing multiple input fields with React Hooks

Over at the React documentation forms section, you'll find an example that utilizes class components like so: class Reservation extends React.Component { constructor(props) { super(props); this.state = { isGoing: true, numberOfGu ...

struggling to populate shadow DOM (trying to follow instructions)

Currently, I am going through the Shadow DOM 101 tutorial on html5rocks. I am using Chrome version 25.0.1364.172 and encountering an issue when attempting to use appendChild on the Shadow DOM root (as demonstrated in the tutorial). The error message displa ...

Discover how to obtain an access token using Yelp API V3 with JavaScript

Currently in the process of learning how to utilize this system, however there appears to be an issue with my code. $.ajax({ dataType: "POST", url: "https://api.yelp.com/oauth2/token", grant_type: "client_credentials", client_i ...

Creating a duplicate key in a JavaScript object that aligns with MongoDB's multiple search string rule: a step-by-step guide

I am attempting to utilize MongoDB for performing searches based on multiple search strings. Here is the format for executing a search with multiple strings in MongoDB: db.meals.find({ $and: [ { mealName: /fish/ }, { mealName: /rice/ }, { mealName: /spicy ...

Tips for rendering only certain sections of a partial view?

Currently, I am in the process of developing a web application that utilizes jquery 1.9.1 and jquery mobile 1.3.2 within Visual Studio (MVC4 template). Throughout the application, there are numerous pages with a side panel feature. While the side panel con ...