стиль в div предотвращает запуск событий jquery

#jquery #css

#jquery #css

Вопрос:

У меня возникли проблемы с тем, что div не запускает события в jquery. Я потратил часы на рассмотрение подобных вопросов, и, похоже, ничего не работает. Вот что я пробовал.

  1. Я удалил все стили, срабатывают события щелчка мышью, и все работает.
  2. Я удаляю стили для nav_btn и всех его родительских элементов div, это не работает.
  3. Я изменил селектор на запуск для класса link, он работает для другого div с классом link, но не для nav_btn.
  4. Я переместил содержимое html и поместил его в html-файл, удалив пустую область php, не срабатывает.
  5. Я пробовал $('.navbar_wrapper').on('click', '.nav_btn', function() {alert ("Yay click works!")}); событие, но оно не сработало.

Я убежден, что проблема в файле css, но я не могу его найти. Любая помощь приветствуется.

 document.getElementsByClassName('nav_btn').onclick = function() {
                alert("Hey it works!");
            };
            $('.nav_btn').on({
                click: function() {
                    alert("Yay click works!");
                }, mouseenter: function() {
                    alert("Mouse entered");
                }, mouseleave: function() {
                    alert("Mouse left");
                }
            });  
 @import url('https://fonts.googleapis.com/css2?family=Press Start 2Pamp;family=Sansita Swashed:wght@600amp;display=swap');
:root{
    --logo-font: 'Sansita Swashed', cursive;
    --link-font: 'Press Start 2P', cursive;
    --header-font: 'Press Start 2P', cursive;
    --header-bar-color: rgb(0, 247, 254, 0.3);
    --header-bar-title-clr: rgb(255, 255, 250);
    --header-bar-title-shadow-clr: rgb(150, 150, 250, 0.9);
    --main-text-color: rgb(255, 255, 255);
    --main-input-bg-color: rgb(255, 255, 255, 0.9);
    
    --main_input-btn-bg-clr: rgb(250,200,100,1);
    --main-active-link-clr: rgb(250,250,100, 0.9);
    --main-active-link-shadow-clr: rgb(250,250,100, 0.6);
    --main-title-txt-size: 390%;
    --main-input-bar-txt-size: 200%;
    --main-content-bg-color: rgb(0,0,0,0.80);
}

.hide_content{
    display: none;
}

* {
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
    margin: 0px;
    padding: 0px;
}

body, html {
    height: 100vh;
    overflow: hidden;
}

body {
    background-image: url("./images/iStock-1127223412.jpg");
    background-position: fixed;
    background-size: cover;
    background-repeat: no-repeat;
}

#main_content {
    display: block;
    position: relative;
    margin: 0 auto;
    text-align: center;
    align-items: center;
    top: 75px;
    width: 100%;
    height: 90vh;
}

#topbar_wrapper {
    display: inline-block;
    position: fixed;
    text-align: center;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100px;
    background-color: var(--header-bar-color);
}

#enter_text {
    font-family: var(--header-font);
    color: white;
    padding-top: 15px;
    font-size: 225%;

}

#login_wrapper {
    position: absolute;
    background-color: var(--main-content-bg-color);
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;

    display: block;
    width: 650px;
    height: 280px;
    margin: auto;
}

.login_inputs, .login_button {
    display: block;
    text-align: center;
    width: 15em;
    margin: 20px auto 5px auto;
    font-size: var(--main-input-bar-txt-size);
    border-radius: 5em; 
}

.login_inputs {
    border: 2.5px inset darkgray;
    background-color: var(--main-input-bg-color);
}

.login_button {
    background-color: var(--main_input-btn-bg-clr);
    border: 2.5px outset darkgray;
}

#logo_wrapper {
    display: inline-block;
    margin: 0 auto;
    /* width: 100%; */
}

.logo {
    font-family: var(--logo-font);
    width: auto;
    margin: auto;
    font-size: var(--main-title-txt-size);
    color: var(--header-bar-title-clr);
    text-shadow: 2px 2px var(--header-bar-title-shadow-clr);
}

#navbar_wrapper {
    display: block;
    position: relative;
    width: auto;
}

.nav_btn{
    display: inline-block;
    position: relative;
    padding: 0px 7px;
    letter-spacing: 5px;
    border: 1px solid yellow;
    z-index: 99;
}

.btn_hover{
    background-color: black;
    border-radius: 5%;
    border: 1px inset darkgray;
}
.active{
    color: var(--main-active-link-clr) !important;
}
.link{
    font-family: var(--link-font);
    font-size: 125%;    
    color: var(--main_input-btn-bg-clr);
    cursor: pointer;
}  
 <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Tim's Portal</title>
        <link rel="stylesheet" href="styles.css?v1">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
        <div id="topbar_wrapper">
            <div id="logo_wrapper">
                <div class="logo">Tim's Portal</div>
            </div>
            <div id="navbar_wrapper">
                <div class="nav_btn link active">Login</div>
                <div class="nav_btn link">About</div>
                <div class="nav_btn link">Contact</div>
            </div>
        </div>

        <div id="main_content">
            <div id="login_wrapper">
                <form action="login" method="post">
                    <div id="enter_text">Welcome</div>
                    <input name="username" class="login_inputs" type="text" placeholder="Email Address">
                    <input name="password" class="login_inputs"type="password" placeholder="Password">
                    <input type="submit" class="login_button" value="Enter">
                    <div class="link">Trouble logging in?</div>
                </form>
            </div>

        </div>

    </body>  

Комментарии:

1. Я неправильно разместил код?

2. Все в порядке. Вы можете встроить свой код в фрагмент кода, чтобы мы могли воспроизвести и проверить ваш код в реальном времени.

Ответ №1:

Причина, по которой ваши кнопки не работают, заключается в том, что .main_content раздел перекрывается с вашими кнопками. Если вы добавите верхнюю границу, это будет исправлено.

 $('.nav_btn').on('click', function() {
    console.log("FIRED")
});  
 @import url('https://fonts.googleapis.com/css2?family=Press Start 2Pamp;family=Sansita Swashed:wght@600amp;display=swap');
:root{
    --logo-font: 'Sansita Swashed', cursive;
    --link-font: 'Press Start 2P', cursive;
    --header-font: 'Press Start 2P', cursive;
    --header-bar-color: rgb(0, 247, 254, 0.3);
    --header-bar-title-clr: rgb(255, 255, 250);
    --header-bar-title-shadow-clr: rgb(150, 150, 250, 0.9);
    --main-text-color: rgb(255, 255, 255);
    --main-input-bg-color: rgb(255, 255, 255, 0.9);
    
    --main_input-btn-bg-clr: rgb(250,200,100,1);
    --main-active-link-clr: rgb(250,250,100, 0.9);
    --main-active-link-shadow-clr: rgb(250,250,100, 0.6);
    --main-title-txt-size: 390%;
    --main-input-bar-txt-size: 200%;
    --main-content-bg-color: rgb(0,0,0,0.80);
}

.hide_content{
    display: none;
}

* {
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
    margin: 0px;
    padding: 0px;
}

body, html {
    height: 100vh;
    overflow: hidden;
}

body {
    background-image: url("./images/iStock-1127223412.jpg");
    background-position: fixed;
    background-size: cover;
    background-repeat: no-repeat;
}

#main_content {
    display: block;
    position: relative;
    margin: 0 auto;
    text-align: center;
    align-items: center;
    top: 75px;
    width: 100%;
    height: 90vh;
    margin-top: 100px;
}

#topbar_wrapper {
    display: inline-block;
    position: fixed;
    text-align: center;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100px;
    background-color: var(--header-bar-color);
}

#enter_text {
    font-family: var(--header-font);
    color: white;
    padding-top: 15px;
    font-size: 225%;

}

#login_wrapper {
    position: absolute;
    background-color: var(--main-content-bg-color);
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;

    display: block;
    width: 650px;
    height: 280px;
    margin: auto;
}

.login_inputs, .login_button {
    display: block;
    text-align: center;
    width: 15em;
    margin: 20px auto 5px auto;
    font-size: var(--main-input-bar-txt-size);
    border-radius: 5em; 
}

.login_inputs {
    border: 2.5px inset darkgray;
    background-color: var(--main-input-bg-color);
}

.login_button {
    background-color: var(--main_input-btn-bg-clr);
    border: 2.5px outset darkgray;
}

#logo_wrapper {
    display: inline-block;
    margin: 0 auto;
    /* width: 100%; */
}

.logo {
    font-family: var(--logo-font);
    width: auto;
    margin: auto;
    font-size: var(--main-title-txt-size);
    color: var(--header-bar-title-clr);
    text-shadow: 2px 2px var(--header-bar-title-shadow-clr);
}

#navbar_wrapper {
    display: block;
    position: relative;
    width: auto;
}

.nav_btn{
    display: inline-block;
    position: relative;
    padding: 0px 7px;
    letter-spacing: 5px;
    border: 1px solid yellow;
    z-index: 99;
}

.btn_hover{
    background-color: black;
    border-radius: 5%;
    border: 1px inset darkgray;
}
.active{
    color: var(--main-active-link-clr) !important;
}
.link{
    font-family: var(--link-font);
    font-size: 125%;    
    color: var(--main_input-btn-bg-clr);
    cursor: pointer;
}  
 <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Tim's Portal</title>
        <link rel="stylesheet" href="styles.css?v1">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
        <div id="topbar_wrapper">
            <div id="logo_wrapper">
                <div class="logo">Tim's Portal</div>
            </div>
            <div id="navbar_wrapper">
                <div class="nav_btn link active">Login</div>
                <div class="nav_btn link">About</div>
                <div class="nav_btn link">Contact</div>
            </div>
        </div>

        <div id="main_content">
            <div id="login_wrapper">
                <form action="login" method="post">
                    <div id="enter_text">Welcome</div>
                    <input name="username" class="login_inputs" type="text" placeholder="Email Address">
                    <input name="password" class="login_inputs"type="password" placeholder="Password">
                    <input type="submit" class="login_button" value="Enter">
                    <div class="link">Trouble logging in?</div>
                </form>
            </div>

        </div>

    </body>  

Комментарии:

1. Это была проблема. Я увеличил высоту моего topbar_wrapper, когда добавил стиль к шрифту, и не переместил main_content вниз, чтобы компенсировать это. Не уверен, как я это пропустил, но спасибо за быстрый ответ.

2. @TimNeufeld Нет проблем. Рад, что смог помочь!

Ответ №2:

Вы также можете исправить проблему, добавив z-index к основному содержимому, равному -1. И, например, добавляя больший z-индекс в #navbar_wrapper, вам не обязательно добавлять пробел… Если у вас есть проблемы с перекрытием, это обычно можно исправить с помощью z-index

И ваша навигация всегда должна быть сверху.

 [...document.querySelectorAll('.nav_btn')].forEach(item => {
  item.addEventListener('click', event => {
  console.clear()
    console.log(true)
  })
})  
 @import url('https://fonts.googleapis.com/css2?family=Press Start 2Pamp;family=Sansita Swashed:wght@600amp;display=swap');
 :root {
  --logo-font: 'Sansita Swashed', cursive;
  --link-font: 'Press Start 2P', cursive;
  --header-font: 'Press Start 2P', cursive;
  --header-bar-color: rgb(0, 247, 254, 0.3);
  --header-bar-title-clr: rgb(255, 255, 250);
  --header-bar-title-shadow-clr: rgb(150, 150, 250, 0.9);
  --main-text-color: rgb(255, 255, 255);
  --main-input-bg-color: rgb(255, 255, 255, 0.9);
  --main_input-btn-bg-clr: rgb(250, 200, 100, 1);
  --main-active-link-clr: rgb(250, 250, 100, 0.9);
  --main-active-link-shadow-clr: rgb(250, 250, 100, 0.6);
  --main-title-txt-size: 390%;
  --main-input-bar-txt-size: 200%;
  --main-content-bg-color: rgb(0, 0, 0, 0.80);
}

.hide_content {
  display: none;
}

* {
  font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
  margin: 0px;
  padding: 0px;
}

body,
html {
  height: 100vh;
  overflow: hidden;
}

body {
  background-image: url("./images/iStock-1127223412.jpg");
  background-position: fixed;
  background-size: cover;
  background-repeat: no-repeat;
}

#main_content {
  display: block;
  position: relative;
  margin: 0 auto;
  text-align: center;
  align-items: center;
  top: 75px;
  width: 100%;
  height: 90vh;
  z-index:-1;
}

#topbar_wrapper {
  display: inline-block;
  position: fixed;
  text-align: center;
  top: 0px;
  left: 0px;
  width: 100%;
  height: 100px;
  background-color: var(--header-bar-color);
}

#enter_text {
  font-family: var(--header-font);
  color: white;
  padding-top: 15px;
  font-size: 225%;
}

#login_wrapper {
  position: absolute;
  background-color: var(--main-content-bg-color);
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  display: block;
  width: 650px;
  height: 280px;
  margin: auto;
}

.login_inputs,
.login_button {
  display: block;
  text-align: center;
  width: 15em;
  margin: 20px auto 5px auto;
  font-size: var(--main-input-bar-txt-size);
  border-radius: 5em;
}

.login_inputs {
  border: 2.5px inset darkgray;
  background-color: var(--main-input-bg-color);
}

.login_button {
  position:relative;
  background-color: var(--main_input-btn-bg-clr);
  border: 2.5px outset darkgray;
  z-index:99;
}

#logo_wrapper {
  display: inline-block;
  margin: 0 auto;
  /* width: 100%; */
}

.logo {
  font-family: var(--logo-font);
  width: auto;
  margin: auto;
  font-size: var(--main-title-txt-size);
  color: var(--header-bar-title-clr);
  text-shadow: 2px 2px var(--header-bar-title-shadow-clr);
}

#navbar_wrapper {
  display: block;
  position: relative;
  width: auto;
    z-index: 9999999;
}

.nav_btn {
  display: inline-block;
  position: relative;
  padding: 0px 7px;
  letter-spacing: 5px;
  border: 1px solid yellow;

}

.btn_hover {
  background-color: black;
  border-radius: 5%;
  border: 1px inset darkgray;
}

.active {
  color: var(--main-active-link-clr) !important;
}

.link {
  font-family: var(--link-font);
  font-size: 125%;
  color: var(--main_input-btn-bg-clr);
  cursor: pointer;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Tim's Portal</title>
  <link rel="stylesheet" href="styles.css?v1">
  <script src="jquery-3.5.1.min.js" type="text/javascript"></script>
</head>

<body>
  <div id="topbar_wrapper">
    <div id="logo_wrapper">
      <div class="logo">Tim's Portal</div>
    </div>
    <div id="navbar_wrapper">
      <div class="nav_btn link active">Login</div>
      <div class="nav_btn link">About</div>
      <div class="nav_btn link">Contact</div>
    </div>
  </div>

  <div id="main_content">
    <div id="login_wrapper">
      <form action="login" method="post">
        <div id="enter_text">Welcome</div>
        <input name="username" class="login_inputs" type="text" placeholder="Email Address">
        <input name="password" class="login_inputs" type="password" placeholder="Password">
        <input type="submit" class="login_button" value="Enter">
        <div class="link">Trouble logging in?</div>
      </form>
    </div>

  </div>

  <script type="text/javascript">
  </script>

</body>

</html>