javascript - 如果我不按住鼠标左键单击,输入字段会失去焦点
问题描述
这是 100% 的代码:
<html lang="en">
<head>
<title>Test</title>
<script defer src="index.js"></script>
</head>
<body>
<span id="spanName">Hi</span>
</body>
</html>
const mySpan = document.getElementById('spanName');
mySpan.addEventListener('click', e =>{
document.getElementById('spanName').innerHTML = "<form><input type=\"text\" placeholder=\"enter name\"></input></form>"
})
这基本上可以满足我的要求。当我单击此跨度时,它会用输入表单替换内部 HTML。唯一的问题是,除非您按住鼠标左键,否则它不会保持焦点。没有其他使用悬停或焦点或任何会与焦点竞争的东西。
我最好的猜测是它与我使用“点击”事件监听器这一事实有关,这就是与焦点竞争的事情,但显然当我取消点击鼠标时表单并不会消失,所以这种行为对我来说有点令人困惑。
注意,我对 JavaScript 还是很陌生,根据行为,我认为这不是解决此问题的正确方法。我已经开始写一堆 CSS(我也是新手),我目前在顶部有一个基本的导航栏,上面有锚标签,当我将鼠标悬停在它们上面时会突出显示,但我正在尝试将它添加到导航栏作为一个跨度,以便它显示“登录”,然后当用户单击它时,跨度更改为登录/密码表单,而不会影响导航栏的其他组件。
也就是说,从美学上讲,除了这个焦点问题之外,一切似乎都按照我的意图进行。由于这是这个最小示例中的一个问题,我假设这是一个独立于我编写的其他代码的问题
提前致谢!
解决方案
只需为您的输入定义一个 Id 并在调用焦点函数之后。
const mySpan = document.getElementById('spanName');
mySpan.addEventListener('click', e =>{
document.getElementById('spanName').innerHTML = "<form><input type=\"text\" id=\"myInput\" placeholder=\"enter name\"></input></form>";
document.querySelector("#myInput").focus();
})
<html lang="en">
<head>
<title>Test</title>
<script defer src="index.js"></script>
</head>
<body>
<span id="spanName">Hi</span>
</body>
</html>
推荐阅读
- python - 有没有办法从一个整数列表中获取一个新的整数列表,加起来等于某个值?
- c# - 将 URL 保存到文件时的逻辑问题
- python - 在包含 NaN 值的 Pandas Dataframe 中获取行和列的 Pythonic 方法
- python - 在 python 中使用 pymongo 使用 db.collection.count() 函数时得到 DeprecationWarning?
- encoding - 如何为catboost编码列表列?
- mysql - 如何在一张表中生成两个序列休眠
- wordpress - 阻止 p 标签在 Wordpress 中自动添加 - Twig、ACF 和过滤简码
- google-apps-script - 尝试在我的 Apps 脚本中检索 Drive 文件夹时收到错误消息
- regex - Dart RegExp 空格无法识别
- tensorflow - keras + TF自定义损失函数中的元素乘法