`
renjie120
  • 浏览: 237765 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D11bba82-ec4a-3d31-a3c0-c51130c62f1c
Java应用集锦
浏览量:22914
社区版块
存档分类
最新评论

解决一个在onload里面live事件绑定无效的bug

 
阅读更多

进入新的公司以来,开发一个新的功能,需要在页面加载之后添加一个live事件,做一个div的展示与隐藏功能,代码如下:

 

$(function(){
 。。。。。。。。
 。。。。。。
     $(".toggle-detail").live("click", function(e) {
    	var event = e || window.event;
        event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true); 
        $(this).parents('.hotel-item').find('.adjust-product-item-detail').toggle();//关键这行
        $(this).find("i").toggleClass("arrow-up");
    });
});

 因为这个页面引用了大量的js,以及样式,加载时间有点长,上面是在页面加载之后应该进行绑定的live事件。还有根据业务需求会动态刷新返回修改这个div(点击一个按钮会局部刷新当前div重新加载)。

 

 

结果bt的测试在进行测试的时候,点击这个div(toggle-detail)出现时而有效时而无效的问题。 

 

 

既然是有时好用有时不好用,而且跟踪是有对应的id元素的,解释的原因就是在进行live绑定的时候,对应的元素可能没有渲染完成(虽然最后我们加载完成的时候看到了div),那在click的事件加了一个延迟看下:

function toggleDiv(obj,isHidden){ 
	if(isHidden>0){
		$(obj).parents('.hotel-item').find('.adjust-product-item-detail').show();
	}else{
		$(obj).parents('.hotel-item').find('.adjust-product-item-detail').hide();
	}
}

    
$(".toggle-detail").live("click", function(e) {
 var parent_div = $(this).parents('.hotel-item');
	var item_detail_hidden = parent_div.find('.adjust-product-item-detail:hidden').size();
	if(item_detail_hidden>0){
		var jj = this;
		setTimeout(function(){toggleDiv(jj,item_detail_hidden);},100); 
	}else{
		var jj = this;
		setTimeout(function(){toggleDiv(jj,item_detail_hidden);},100); 
	}
	$(this).find("i").toggleClass("arrow-up");
});

 这里在进行live单击的时候,延迟执行切换div显示的工作,结果就好了。

 

就这样,通过在setTimeout进行一些处理就可以了,没有出现之前的bug了。

 

在很多时候都可能还有这样的情况,虽然是预期应该有div,有绑定好事件,但是发现就是无效。那不妨js加载的时候,延迟一下看看。

 

ps:在解决另外一个bug的时候,也用了这个setTimeout进行事件的绑定,哈哈。

 

分享到:
评论

相关推荐

    js的image onload事件使用遇到的问题

    在Web前端开发中,onload事件是一个非常重要的概念,主要用于处理图片或者其他资源加载完成后的操作。 首先,我们来了解一下onload事件。onload事件是当图像或其他资源完全加载后触发的事件。在JavaScript中,我们...

    JavaScript 事件绑定及深入

    1. **事件覆盖问题**:如果一个事件绑定了多个函数,后绑定的函数会覆盖之前的函数,导致前面的函数无法执行。 例如: ```javascript window.onload = function() { alert('Lee'); } window.onload = ...

    脱离document.onload和window.onload的onload事件

    脱离document.onload和window.onload的onload事件,可多次添加加载事件!

    ie 处理 gif动画 的onload 事件的一个 bug

    IE浏览器在处理GIF动画的onload...该bug是IE浏览器在处理GIF动画的onload事件时存在的一个bug,可以通过在onload事件函数中,将onload事件设置为null来解决。同时,静态GIF、JPG、BMP等其他格式的图片不会出现这个bug。

    把多个JavaScript函数绑定到onload事件处理函数上的方法

    然而,如果试图将多个函数绑定到同一个`onload`事件处理函数,会遇到问题,因为每个事件处理函数只能关联一个函数。 例如,如果我们有`firstFunction()`和`secondFunction()`两个函数,我们可能会尝试像下面这样...

    javaScript的onload事件例子

    javaScript的onload事件的代码,javaScript内嵌在html中。

    img onload事件绑定各浏览器均可执行

    `onload`事件是JavaScript中用于监听一个元素加载完成的事件,特别是在处理图片时非常常见。本文主要探讨的是在不同浏览器环境下,如何正确地对`img`标签使用`onload`事件进行绑定。 通常,开发者会尝试以下方式对`...

    ie中 body onload 和 window onload 解决法案

    首先,`body.onload` 是针对`<body>`标签的一个事件。当浏览器解析到`<body>`标签并且页面中的所有元素(不包括外部资源如图片和脚本)加载完成时,这个事件就会触发。例如: ```html <body onload="myFunction()">...

    IE中图片的onload事件无效问题和解决方法

    `onload`事件在JavaScript中被广泛用于监听图片加载完成的时刻,从而执行相应的处理函数。然而,在IE浏览器(尤其是旧版本)中,图片的`onload`事件可能会出现一些异常情况,导致事件无法正常触发。这个问题主要与IE...

    javascript 处理事件绑定的一些兼容写法

    首先,让我们看一个基本的事件绑定函数的实现。这个函数`addEvent`接受三个参数:目标对象`obj`,事件类型`type`,以及事件处理函数`fn`。它会检查浏览器是否支持`addEventListener`方法,这是W3C标准的事件处理方式...

    IE浏览器中图片onload事件无效的解决方法

    这段代码首先创建了一个新的`Image`对象,然后定义了`onload`事件处理器,最后设置图片的源地址`_src`。这样,即使图片在缓存中,浏览器也会在加载前先执行`onload`事件处理器,确保`loading`类在图片加载完成后能被...

    jquery绑定事件不生效的解决方法

    最后,解决jQuery绑定事件不生效的一个重要原则是:确保在绑定事件之前,相关的DOM元素已经加载到页面中。如果还是无法解决,建议使用开发者工具进行调试,查看是否有代码错误导致执行流程中断,或者检查是否有其他...

    JQuery-- onload,ready方法详细解说

    例如,在 onload 事件中,我们只能加载一个函数,而在 ready 事件中,我们可以加载多个函数,这样可以使得代码更加灵活和易维护。另外,在 onload 事件中,代码和内容不分离,这也会导致一些问题。 然而,在某些...

    iframe中onload的bug

    NULL 博文链接:https://snandy.iteye.com/blog/666530

    javascript大事绑定学习要点_.docx

    这个方法使得我们可以为同一个事件添加多个监听器,解决了传统事件绑定的问题。 对于IE浏览器,它使用不同的事件绑定方式:`attachEvent`和`detachEvent`。这两个方法的用法与`addEventListener`和`...

    IE8中动态创建script标签onload无效的解决方法

    今天做项目,发现一个奇怪的问题,动态创建的script标签在IE8下无法触发onload事件。 代码如下: 代码如下:var loadJs = function(src, fun){  var script = null;  script = document.createElement(“script...

    window.onload

    `window.onload` 是一个全局事件处理函数,当整个页面(包括所有的脚本、图片、CSS 文件等)加载完毕后触发。它常用于在页面完全加载完成后执行某些操作,如初始化页面元素、绑定事件监听器等。 ##### 2.2 实现方式...

Global site tag (gtag.js) - Google Analytics