DOM元素点击失效问题

在为DOM添加事件处理函数的时候,出现了一个DOM元素无法点击的问题,
Chrome调试截图
虽然class=”share”的元素的img类型的子孙元素中的第一个元素已经设置了鼠标点击的事件处理函数,但是这个事件处理函数并不能被触发,也就是点击这个图片的时候没有反应。
第一个原因:由于需要注册事件处理函数的img元素是放在header标签里面的,但是header标签如果不进行手动设置height,那么header标签的高度为0px,所以会导致点击不到header中的元素。

这里写图片描述

<body>
    <div class="main">
        <div class="home-page">
            <header>
                <div class="share">
                    <img src="assets/img/sharethis_icon.png">
                    <img src="assets/img/facebook_icon.png">
                    <img src="assets/img/friendcircle_icon.png">
                    <img  src="assets/img/twitter_icon.png">
                    <img  src="assets/img/yahoo_icon.png">
                </div>
    ........
</body>

第二个原因:由于我的页面中间有一个很大的标题,而为了让这个标题居中,我采用了如下CSS样式使其居中:

h1 {
    text-align: center;
    margin: 0;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    padding-top: 15%;
}

这样的居中方式导致了这个h1标签占据了header原本的位置,对header元素进行了覆盖,所以点击header中的img元素的时候,实际上是点击了h1元素,解决办法可以将padding-top改为margin-top即可,这样就可以点击到需要的img元素了。

第二个问题我使用了一个点击页面,可以返回自己点击的元素的标签名的javaScript函数来进行检测的,这个函数比较实用。

function show_element(e){  
        if(!e){  
          var e = window.event;  
        }  
        //获取事件点击元素  
        var targ = e.target;  
        //获取元素名称  
        var tname = targ.tagName;  
        alert(tname);  
} 
是的,JSP DOM元素的事件失效可能与层级或加载顺序有关。 当页面中有多个DOM元素时,它们的事件可能会相互影响,导致事件失效。例如,如果一个元素被另一个元素覆盖,那么它的事件可能会被覆盖,从而导致事件失效。另外,如果元素的层级结构发生变化,也可能导致事件失效。 此外,如果事件绑定的代码在DOM元素加载之前运行,也可能导致事件失效。例如,如果在文档加载之前绑定了一个事件,而该事件绑定的元素在文档加载之后才被创建,那么事件就无法触发。 解决方法: 1. 确保元素层级结构没有被其他元素覆盖。 2. 确保元素在绑定事件之前已被创建并加载。 3. 使用事件委托来绑定事件,这样可以避免元素层级结构改变或者动态创建元素问题。 以下是一个使用事件委托来绑定事件的代码示例: HTML: ```html <div id="myDiv"> <button>点击我</button> </div> ``` JavaScript: ```javascript document.addEventListener("DOMContentLoaded", function() { var myDiv = document.getElementById("myDiv"); myDiv.addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { alert("点击事件触发"); } }); }); ``` 在上述代码中,使用了事件委托来绑定click事件,这样可以避免元素层级结构改变或者动态创建元素问题。事件委托会将事件绑定到父元素上,然后通过event.target属性来判断实际触发事件的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值