Исключить элементы для события focusout

У меня есть div, который выглядит так:

    <div class = "whole-container" id = "body">
  <form method = "post" action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
  <div class = "queryAndpostswitcher">
     <button id = "logOut" name = "logOut" title = "Log Out From The Site"> <i class = "fas fa-sign-out-alt"></i></button>
  </div>
</form>
  <div class = "make_a_post" id = "container">
    <div class = "tabs">
      <button name = "make_post" id = "post"><i class = "fa fa-pencil"></i> Make a post </button>
      <button name = "make_query" id = "query"><i class = "fa fa-question"></i> Make a query </button>
    </div>
    <div class = "main-post" id = "main-post">
      <textarea placeholder = "Enter Your Post Here" minlength = "5" onfocus = "showButton();" id = "postTextArea" onfocusout = "makeEveryThingNormal(this.id)"></textarea>
    </div>
    <div class = "main-query" style = "display: none;" id = "main-query">
      <textarea placeholder = "Enter Your Query Here" minlength = "5" onfocus = "showButton();" id = "queryTextArea" onfocusout = "makeEveryThingNormal(this.id)"></textarea>
      <select name = "askTo">
        <option> Friends </option>
        <option> Community </option>
        <option> Both</option>
      </select>
    </div>
        <form action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method = "POST" enctype = "multipart/form-data">
                <label for = "multimedia"> <i class = "fa fa-camera-retro"></i> Multimedia </label>
                <input type = "file" id = "multimedia" name = "image" style = "display: none;"/>
               <input type = "submit" style = "display: none;"/>
          </form>
          <div class = "postingOptions">
        <button id = "postButton"><i class = "fa fa-tick"></i>Let's Go!</button>
      </div>
      </div>

У него есть два варианта: опубликовать сообщение или запрос. Я добавил события onfocus и onfocusout. И мои теги скрипта выглядят так:

<script type = "text/javascript">
  function showButton() {
    let container = document.getElementById("container");
    let postButton = document.getElementById("postButton");
    let otherPosts = document.getElementsByClassName("post");
    container.style.height = "30%";
    postButton.style.display = "block";
    for(let i=0;i<otherPosts.length;i++){
      otherPosts[i].style.display = "none";
    }
  }
  function makeEveryThingNormal (id) {
    let container = document.getElementById("container");
    let postButton = document.getElementById("postButton");
    let otherPosts = document.getElementsByClassName("post");
    postButton.addEventListener("click", () => {
      alert("Yahooo!");
    })
    container.style.height = "25%";
    postButton.style.display = "none";
    document.getElementById(id).value = "";
    for(let i=0;i<otherPosts.length;i++){
      otherPosts[i].style.display = "block";
    }

  }
</script>

Таким образом, он выделяет только div публикации и скрывает другие элементы, когда ввод находится в фокусе. Теперь я должен был запустить функцию при нажатии кнопки, но при нажатии кнопки функция не работает. Итак, если есть такая функция, как:

if (button.isClicked===true){
do something;
}

Или, если бы я мог исключить некоторые элементы на focusout, проблема была бы решена. Но вроде ничего не работает. Итак, что мне делать, чтобы все прошло хорошо? Пожалуйста, ответьте!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
199
2

Ответы 2

вы можете попробовать добавить onclick как атрибут кнопки и дать ему функцию js для запуска, если это был пример щелчка:

 <button onclick = "myFunction()">Click me</button> 

также вы можете использовать JQuery .click и .on для захвата события щелчка:

$( "#target" ).click(function() {
   alert( "Handler for .click() called." );
});
$( "#dataTable tbody" ).on( "click", function() {
   console.info( $( this ).text() );
});

и вы можете использовать addEventListener для захвата щелчка:

document.getElementById("myBtn").addEventListener("click", function); 

Я не очень хорошо это понял, не могли бы вы объяснить. Я плохо знаю jQuery!

user9467624 18.03.2018 13:13

Слушатель событий щелчка не запускается. Я добавил это в код

user9467624 18.03.2018 13:14

с какой кнопки вы пытаетесь захватить щелчок?

medyas 18.03.2018 13:14

.click фиксирует щелчок по элементу, будь то тег html, класс или идентификатор, просто передайте его $ ('[tag, #id или .class]'). click (funtion); функция может быть записана там или вы можете указать имя функции, которая будет вызываться

medyas 18.03.2018 13:16

также не забудьте включить библиотеку jquery в верхнюю часть страницы html, и это должно сработать

medyas 18.03.2018 13:17

Все заработало, добавив функцию setTimeout (). Мой новый код выглядит так:

    <script type = "text/javascript">
  function showButton() {
    let container = document.getElementById("container");
    let postButton = document.getElementById("postButton");
    let otherPosts = document.getElementsByClassName("post");
    container.style.height = "30%";
    postButton.style.display = "block";
    for(let i=0;i<otherPosts.length;i++){
      otherPosts[i].style.display = "none";
    }
  }
  function makeEveryThingNormal (id) {
    let container = document.getElementById("container");
    let postButton = document.getElementById("postButton");
    let otherPosts = document.getElementsByClassName("post");
    postButton.addEventListener("click", () => {
      alert("Yahooo!");
    })
    setTimeout(otherStuffs, 500);
    function otherStuffs () {
    //these things are to run when other areas are clicked!
    container.style.height = "25%";
    postButton.style.display = "none";
    document.getElementById(id).value = "";
    for(let i=0;i<otherPosts.length;i++){
      otherPosts[i].style.display = "block";
    }
    }

  }
</script>

Другие вопросы по теме