почему event.target не запускается в следующем коде, пока работает простой обработчик события click?

1

Ниже приведен код

(function(window){
  
  var form = document.getElementById('form_element'),
      form2 = document.getElementById('form_element2'),
      container = document.getElementById('container');
  
  window.addEventListener('mouseup', getAlert);
  
  function getAlert(event) {
    if(event.target === form) {
      alert('I clicked on a form');
    }
  }
  
  form2.addEventListener('click', function() {
    container.innerHTML = '<h1>I am however working</h1>';
  });
  
})(window);
#container {
  height:400px;
  width:400px;
  background:red;
}

#form_element {
  display:inline-block;
}
<form action="" id="form_element">
  <input type="text" placeholder="Enter here..."/>
</form>

<form action="" id="form_element2">
  <input type="text" placeholder="Enter here..."/>
</form>

<div id="container">
  <h2>Something goes here</h2>
</div>

Не могли бы вы помочь мне с этим, с некоторым объяснением? Различия в jquery-селекторе?

Я застрял в таких маленьких ситуациях. Не могли бы вы помочь мне разобраться.

Спасибо

Теги:
dom
event-listener

1 ответ

1
Лучший ответ

Проблема в том, что target когда mouse goes up является input element а не form

Вот несколько способов решения вашей проблемы

  1. Проверьте, является ли target input element

    window.addEventListener("mouseUp", getAlert);
    function getAlert(event) {
        if (event.target === form.firstElementChild) {
            alert('I clicked on a form');
        }
    }
    
  2. Добавьте listener в form чтобы не нужно было ничего проверять

    form.addEventListener("mouseUp", getAlert);
    function getAlert(event) {
        alert('I clicked on a form');
    }
    
  3. Проверьте, является ли target form или если target является element form

    window.addEventListener("mouseUp", getAlert);
    function getAlert(event) {
        if (event.target === form || form.contains(event.target)) {
            alert('I clicked on a form');
        }
    }
    
  4. Используйте CSS для добавления некоторого padding к form чтобы у вас было свободное пространство, чтобы щелкнуть form без нажатия на input

    #form_element {
        padding: 20px;
    }
    
  5. Используйте CSS чтобы сделать input element "невидимым" для мыши

    #form_element>input {
        pointer-events: none;
    }
    
  • 0
    Привет, Ник. Спасибо, что сделал работу.
  • 0
    @jeff Нет проблем, так какой метод вы выберете?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню