考虑一下我的代码集:
<!DOCTYPE html>
<html>
<head>
<script src="script.js"></script>
</head>
<body style="color: black;">
<button id="button" onclick="start()" onfocusout="start()">Look Down</button>
<table>
<tr>
<td>
<a style="display: none;"; id="list" href="https://google.com/">Player-1</a>
</td>
</tr>
</table>
</body>
</html>
其中我的脚本文件是:
function start(){
var a=document.getElementById("list").style;
if(a.display=="none") a.display="block";
else a.display="none";
}
function start() {
var a = document.getElementById("list").style;
if (a.display == "none") a.display = "block";
else a.display = "none";
}
<!DOCTYPE html>
<html>
<head>
<script src="script.js"></script>
</head>
<body style="color: black;">
<button id="button" onclick="start()" onfocusout="start()">Look Down</button>
<table>
<tr>
<td>
<a style="display: none;" ; id="list" href="https://google.com/">Player-1</a>
</td>
</tr>
</table>
</body>
</html>
在这里,按下“向下看”按钮时显示链接Player-1。但是当我点击选项Player-1时,我失去了选项,因为我已经离开了按钮的焦点。结果,我无法转到我打算转到的链接。那我该怎么补救呢我的意思是我想按下按钮后点击链接,但不想出来的焦点。
2条答案
按热度按时间qncylg1j1#
行为
<button>
时,调用start()
并显示<a>
,很好。👍.<a>
时,<button>
失去了对<a>
的焦点,这会触发<button>
上的“focusout”事件,从而再次调用start()
,这会删除<a>
,bad。👎.解决方案
1.只需删除
onfocusout
内联事件处理程序(参见图一和示例A)。1.如果你想让
<a>
在点击 *<button>
和<a>
之外的任何东西时消失,那么你只想让<a>
消失,而不是像start()
那样在 * there * 和 * gone * 之间切换。要获得上述行为,请通过注册公共祖先元素并使“click”事件处理程序确定特定元素的特定行为来委托“click”事件(参见示例B和事件委托)。示例A
<html>
将只有一个<head>
和一个<body>
作为直接子节点。<head>
继续<body>
。<meta>
、<title>
、<link>
和<style>
在<head>
中(最好按此顺序)。<script>
也可以在<head>
中,但99%的时间应该位于<body>
的最底部(换句话说:作为<body>
的最后一个子元素,正好在结束标记之前:</body>
)示例B
onclick
和onfocusout
已从<button>
中删除。hgqdbh6s2#
不带JavaScript的解决方案(仅限CSS)
如果你用JS函数来解决这个问题,它将在页面其余部分的每次点击时运行。没有必要降低您的网站性能,并使用来自访问者的处理器能力。
这将是不使用JS的方法(链接显示为一个块,因此它可以具有过渡效果和延迟,允许人们在它消失之前点击它):