javascript - 通过单击 input 元素内部来停止事件传播

标签 javascript dom-events event-listener

我在这里遇到了一个奇怪的问题,我有一个 div 附加了一个点击事件,还有一个 inputon-blur 事件和 button 附加了点击事件。


<!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同样。

最佳答案

您必须为输入点击设置停止传播而不是 blur , 所以 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>

关于javascript - 通过单击 input 元素内部来停止事件传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58077147/

相关文章:

javascript - 我的 html5 自定义音频控件遇到一些问题

javascript - 在 mousemove 事件监听器函数主体中设置左侧位置不起作用

html - 滚动时停止列表项 onclick 事件触发

java - 是否有一个 Java WindowListener 在显示窗口之前被调用?

javascript - 后台定位下拉菜单问题

javascript - 在 JavaScript 中捕获 *所有* 显示字符?

java - 更新 JFrame 以显示动画。游戏用

java - 所有类别的点击监听器

javascript - 如何让复选框在 AngularJS 中显示选中/未选中状态?

javascript - 文本输入焦点丢失事件