扫码关注官方订阅号
大家正在搜 奇妙的朋友 快乐大本营 天天向上 我是歌手 中国好声音
大家正在搜
这样写就不能点击链接跳转了,我是想实现新浪网上link新浪首页上方的那个搜索框的效果的,查了查好像是事件冒泡有关的,不是很懂,不知道大家有什么好的建议没,谢谢
闭关修行中......
var a=document.getElementById("a"); var b=document.getElementById("b"); var doc=document.getElementsByTagName("html")[0]; a.onfocus=function() { b.style.display="block"; } a.onclick=function(e){ e.stopPropagation(); } doc.onclick=function(){ b.style.display="none"; }
要解决这个问题很简单..你只要仿得更彻底一点,做一个slideToggle动画就可以了。 具体分析:当有input处于focus状态时,点击页面其它元素,会先触发input元素的blur事件并回调其事件处理器,然后在触发其它元素的事件。 证据! HTML
<input type="text" id="input"> <button id="click">click</button>
JS
document.getElementById('input').onblur = function () { console.log("blur"); }; document.getElementById('click').onclick = function () { console.log("click"); };
console输出: blur click
所以你的链接点击不会跳转是因为先触发了blur,点击事件触发前执行了b.style.display = none
现在你应该知道为什么slideToggle隐藏可以点击跳转了吧~
解决方法有很多,介绍一种逻辑上的正确处理方案:无法触发点击事件就自己trigger
a.onblur = function(){ b.style.display="none"; event = document.createEvent("HTMLEvents"); event.initEvent("click", true, true); test.dispatchEvent(event); }
因为新浪那边不是a哦,他是一堆p,绑定了点击然后跳转哦
正如你所说,我看了一下新浪的写法。
加一个setTimeout。
a.onblur=function(){ window.setTimeout(function(){ b.style.display="none"; },100) }
要比给整个doc加事件好。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
要解决这个问题很简单..你只要仿得更彻底一点,做一个slideToggle动画就可以了。
具体分析:
当有input处于focus状态时,点击页面其它元素,会先触发input元素的blur事件并回调其事件处理器,然后在触发其它元素的事件。
证据!
HTML
JS
console输出:
blur
click
所以你的链接点击不会跳转是因为先触发了blur,点击事件触发前执行了b.style.display = none
现在你应该知道为什么slideToggle隐藏可以点击跳转了吧~
解决方法有很多,介绍一种逻辑上的正确处理方案:无法触发点击事件就自己trigger
因为新浪那边不是a哦,他是一堆p,绑定了点击然后跳转哦
正如你所说,我看了一下新浪的写法。
加一个setTimeout。
要比给整个doc加事件好。