Остановите распространение события, щелкнув внутри элемента ввода - PullRequest
3 голосов
/ 24 сентября 2019

Я столкнулся со странной проблемой, у меня есть div с прикрепленным к нему событием click, и input с событием on-blur и button с прикрепленным событием click.


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<div onClick='div()'>
<input onBlur='input()' />
<button onClick='button(event)'> ABCD </button>
</div>
</body>
</html>

Вот функции, которые вызываются при нажатии кнопок.

function input(event){
    console.log('input')
    event.stopPropagation();
}

function button(event) {
  console.log('button')
  event.stopPropagation();
}

function div(){
  console.log('div')
}

Проблема, с которой я здесь сталкиваюсь, заключается в том, что, если я щелкаю внутри поля ввода, то регистрируется, что внутрифункция div, я пробовал event.stopPropagation(), но она не работает, есть ли способ заставить ее работать?то есть - не регистрировать то, что находится внутри div при нажатии на вход.

Вот это Bin для того же самого.

1 Ответ

3 голосов
/ 24 сентября 2019

Вы должны установить остановку распространения для входного клика, а не размытия, поэтому Div-клик не будет распространяться:

см. Фрагмент ниже

function input(){
	console.log('input')
    event.stopPropagation();
}

function inputStopPropagation() {
   event.stopPropagation();
}

function button(event) {
  console.log('button')
  event.stopPropagation();
}

function div(){
event.stopPropagation();
  console.log('div')
}
<div onClick='div()' style="padding:5px; background :green">
<input onBlur='input()' onClick='inputStopPropagation()' />
<button onClick='button(event)'> ABCD </button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...