技术文摘
设置div可拖动后内部input无法输入的解决方法
2025-01-09 16:21:56 小编
在网页开发过程中,我们有时会遇到这样一个问题:当设置了 div 可拖动后,内部的 input 元素却无法正常输入内容。这无疑会影响用户体验,接下来就为大家详细介绍解决这一问题的方法。
让我们来分析一下这个问题产生的原因。通常情况下,div 的可拖动效果是通过 JavaScript 代码来实现的,在拖动过程中,会对鼠标事件进行监听和处理。而当 input 元素处于可拖动的 div 内部时,这些鼠标事件可能会与 input 本身的输入事件产生冲突,导致输入功能受到干扰。
那么,如何解决这个问题呢?一种常见且有效的方法是利用事件委托和阻止事件冒泡。我们可以在可拖动的 div 上绑定一个事件监听器,当鼠标事件发生时,先判断事件的目标元素是否为 input。如果是 input,就阻止事件继续向上冒泡,这样就可以避免 div 的拖动事件对 input 的输入操作产生影响。
具体实现代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>解决 div 可拖动后内部 input 无法输入问题</title>
<style>
#draggable {
width: 200px;
height: 200px;
background-color: lightblue;
cursor: move;
}
</style>
</head>
<body>
<div id="draggable">
<input type="text" placeholder="请输入内容">
</div>
<script>
const draggable = document.getElementById('draggable');
let startX, startY;
draggable.addEventListener('mousedown', function(event) {
if (event.target.tagName.toLowerCase() === 'input') {
event.stopPropagation();
return;
}
startX = event.clientX - draggable.offsetLeft;
startY = event.clientY - draggable.offsetTop;
document.addEventListener('mousemove', drag);
document.addEventListener('mouseup', stopDrag);
});
function drag(event) {
const x = event.clientX - startX;
const y = event.clientY - startY;
draggable.style.left = x + 'px';
draggable.style.top = y + 'px';
}
function stopDrag() {
document.removeEventListener('mousemove', drag);
document.removeEventListener('mouseup', stopDrag);
}
</script>
</body>
</html>
通过以上代码,我们在 mousedown 事件中添加了对 input 元素的判断,当事件目标是 input 时,调用 stopPropagation() 方法阻止事件冒泡,从而确保 input 可以正常输入。在非 input 元素上触发 mousedown 事件时,正常执行 div 的拖动逻辑。
遇到设置 div 可拖动后内部 input 无法输入的问题时,利用事件委托和阻止事件冒泡的技巧,能够轻松解决该问题,提升网页的交互性和用户体验。
- Go中JSON到CSV转换时记录丢失之谜的调试
- Go mod使用时遇“package xxx is not in GOROOT”错误的解决方法
- Gin中扩展Context及自定义响应方法的方法
- 本地服务器支付宝移动支付回调接口为何不打印日志
- Gorm中跨文件共享DB实例的方法
- 微信扫码外部码正常内部码失效咋办
- Golang 中 HTTP 服务器处理程序协程在主函数结束后仍能持续运行的原因
- Go反射中elem方法操作指针对象时返回值的含义
- 无页码分页数据排序变动致重复显示的解决方法
- 无页码分页排序变动后怎样防止数据重复显示
- Go gRPC服务偶现Socket Closed错误排查方法
- jQuery提交表单异步上传数据时回调函数抛出XML5619错误原因
- 列表嵌套列表时怎样遍历每个子列表元素
- Redis存储用户消息避免数据覆盖的方法
- 用正则表达式匹配多个值并依次替换为不同值的方法