javascript - 事件执行顺序问题
阿神
阿神 2017-04-10 15:02:57
[JavaScript讨论组]
    


    
    
    
    
    


    
    

大家正在搜

这样写就不能点击链接跳转了,我是想实现新浪网上
link新浪首页上方的那个搜索框的效果的,查了查好像是事件冒泡有关的,不是很懂,不知道大家有什么好的建议没,谢谢

阿神
阿神

闭关修行中......

全部回复(4)
大家讲道理
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);
}
ringa_lee

因为新浪那边不是a哦,他是一堆p,绑定了点击然后跳转哦

怪我咯

正如你所说,我看了一下新浪的写法。

加一个setTimeout。

 a.onblur=function(){
    window.setTimeout(function(){
       b.style.display="none";
    },100)     
    }

要比给整个doc加事件好。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号