Is it possible to create a BS Modal without a backdrop, overlay, and with the ability to focus input fields when displayed

When using BS modals without a backdrop and with custom overlay styling to make them look like floating windows (for example, for cookie consent), I am aware that setting button elements to be clickable requires the following:

.modal { pointer-events: none }

But how can I ensure that input elements are focusable and writable when the modal is displayed?


You can view my code snippet or access the fiddle here.

$("#exampleModal").modal({
  backdrop: false,
  show: true
})
.modal { pointer-events: none; }
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet"/>

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Launch demo modal
</button>

<input type="text" value="Hi">

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Answer №1

If you want to make changes in the textfields of a modal in Bootstrap, you can disable the focus listener that is set on the 'shown' event of the modal. Here is how you can achieve this:

$("#exampleModal").modal({
  backdrop: false,
  show: true
})

$('#exampleModal').on('shown.bs.modal', function() {
    $(document).off('focusin.modal');
});
.modal { pointer-events: none }
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">


<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Launch demo modal
</button>

<input type="text" value="Hi">

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>


<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>

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

Locate integer and add a decimal point followed by two zeros

I want to add .00 to a number if it is not already a decimal. However, the code I am using below seems to be converting the entire number to 0.00 instead of just appending .00 at the end. For instance, if the number is 12,200, it ends up as 0.00 after appl ...

Animating the size of an element with dynamic content

I am working on a feature where clicking on a card should display a summary. When a new summary is shown, I want the summary container to animate and align its position with the associated card (top). However, despite my efforts, I am facing an issue whe ...

Gatsby's build process encounters a stumbling block when webpack fails due to issues

Every time I try to run gatsby build, an error pops up: failed Building static HTML for pages - 10.179s ERROR #95313 Building static HTML failed Refer to our documentation page for more details on this issue: https://gatsby.dev/debug-html 343 | ...

Click event for nested attributes in Angular 6 using JQuery is unresponsive

I'm having trouble getting a click listener to work in jQuery. It seems like nested attributes created in HTML are not being recognized by jQuery when trying to add the listener. I attempted to add a listener in the ngOnInit() method, but it doesn&ap ...

Encountering a node globby error when implementing multiple patterns

Currently, I am successfully using node glob for folder1 as shown below: glob('folder1/*.js'), function(err, files){ if (err) { console.log('Not able to get files from folder: ', err); } else { files.forEach(function (file) ...

Getting the image name and extension in an Angular application

Within this block of code, I am working with an image named xyz.abc.jpg. I am able to extract the image extension successfully, but now I need to figure out a way to extract the image name itself without the extension included. Is there a way to achieve ...

Find the value of a JavaScript string variable using an alternative name

My latest JavaScript function is designed to fetch JSON data from either a server or local files on any browser. This piece of code processes JSON from two sources: an XMLHttpRequest response, or a variable imported via script. In the case of the latter, ...

What do we need to ensure that the ajax server response is executed as intended in the jQuery ajax post function?

The jQuery script provided here returns the following string: '#prayer_date'.html("03/19/1968"); However, it remains unexecuted because the function does not interact with the data variable. To make sure the above result is executed within the ...

Kindly attach the npm-debug.log file along with your support inquiry

When I try to use the "watch" command, I encounter the following error: "Please include the following file with any support request: C:\wamp\www\chandco\wp-content\themes\chandco\npm-debug.log". Below are the files in q ...

Is it possible to utilize the everyone role in discord.js?

I'm currently working on integrating my lock and mute command with a per-server settings feature that I recently implemented using mongodb. My goal is to have the command retrieve the member's role from the database (roles.cache.get(guildProfile. ...

Having trouble registering for router events in Aurelia using TypeScript

It's puzzling why this isn't functioning as expected:) import {Router, RouterConfiguration} from 'aurelia-router'; import { EventAggregator } from 'aurelia-event-aggregator'; import {autoinject} from 'aurelia-framework&a ...

Regex inquiry: prevent a standalone dot (must be preceded by a digit or followed by a digit)

I am seeking to enable users to input decimal or integer values as shown below (A) .5 0.500 3 0 0.0 30 500000 4000.22 0. Currently, I am using the following regex pattern: factor: /^-?\d*[.]??\d*$/, The issue with this regex is that it also acc ...

Issue with Bootstrap4 toggler malfunctioning and not displaying links upon resizing the page

My Bootstrap navbar isn't displaying the links when I click the hamburger menu after resizing the window. Here's the code snippet: <div class="fixed-top"> <nav class="navbar navbar-dark navbar-expand-lg cusSticky&q ...

Performing an action once all AJAX requests have finished

I'm dealing with a situation where I have a click event triggering 3 ajax calls: $("#button").click(function(e) { e.preventDefault(); $.ajax(call1); $.ajax(call2); $.ajax(call3); some_function() //needs to be executed only afte ...

Combining arrays using checkboxes in React.js

As someone completely new to coding, my current endeavor involves learning React by developing a flashcard app for studying Japanese. The concept revolves around incorporating a series of checkboxes that facilitate the selection of either Hiragana or Kat ...

`Combining Promises and yields for seamless functionality`

I have been struggling to incorporate yield with a created Promise. Despite extensively researching, I am still unable to understand where I am going wrong in my implementation. Based on my understanding, when calling the generator function, I need to use ...

How can we distinguish between the two samples?

Example A: function mergeAndSort(array){ if (array.length > 1){ let middle = parseInt(array.length/2); let leftArr = array.slice(0, middle); let rightArr = array.slice(middle); mergeAndSort(lef ...

I'm struggling to retrieve a specific column of data from a JSON file. Does anyone know how to do this successfully?

I have a JSON file with various columns, but I only want to display the rdid column. I am new to learning node and still trying to figure things out. data [ {"edid":"r7vr8r", "rdid":"86596", "rssi":&qu ...

Using vuetify's v-autocomplete component with the options to select all and clear items

I am trying to incorporate a "Filter by values" feature in my application similar to Excel or spreadsheets. However, I am facing difficulty with implementing the 'Select all' and 'Clear' button in v-autocomplete. <v-col> < ...

Creating a unique class that mirrors the functionality of .container-fluid

In the project I am currently involved in, there is a CSS file that overrides the .container-fluid class in a file that is imported into all Vue projects. I am in the process of adding 7 new pages to this project. While the overridden behavior is useful f ...