用on给动态添加的元素绑定hover事件,没有生效的解决

1.需求:经常要动态加载dom节点,加载之后的节点当然也会有一些绑定事件的需求,今天给一个事件绑定hover,用jQuery,竟然没有生效。先上没有生效的代码

$(‘ul.course_lists‘).on(‘hover‘,‘li‘,function(){
      // mouseenter dosomething
},function(){
      // mouseleave dosomething
});

2.问题出在哪里了?

  • on函数传的参数不对?查查文档呗,我看或不看他,他都在那里,我看他,或许可以帮助我解决问题,我不看他,依旧稀里糊涂
  • 先看语法
$(selector).on(event,childSelector,data,function,map) 
  • 很明显了,在传递到里面的参数中,只看到可以传一个function,而我传了两个函数

3.分析

  在JQuery中,hover()函数本身是对 mouseenter && mouseleave 的封装,然而在原生event中,并没有hover这一事件,所以在传递参数hover时,并不会有任何的效果。

  如果我想绑定类似hover的效果,可以绑定两个事件mouseenter && mouseleave + 一个function ,样式就用类名来toggle,也可以在map里面,一个事件对应一个function

4.代码来了

  •   绑定两个事件
// js$(‘ul.course_lists‘).on(‘mouseenter mouseleave‘,‘li‘,function(){
      $(this).toogleClass(‘border_color‘);
});

// css
.border_color{
    border-color:#ccc;
}

li{
  border:1px solid #fff;
}
  • map
$(‘ul.course_lists li‘).on({
    mouseenter:function(){
        $(this).css(‘border-color‘,‘#ccc‘);
    },
    mouseleave:function(){
        $(this).css(‘border-color‘,‘#fff‘);
    }
});

5.搞定,but,on()方法不要再出错了! 

 

时间: 2024-11-05 21:44:03

用on给动态添加的元素绑定hover事件,没有生效的解决的相关文章

jquery动态添加的元素绑定的事件不生效的问题

我们可以通过 $(document).on('click', '#xxx', callback) 这种形式解决. 原因,一般情况下,我们是通过 $('#xxx').click(callback) 这种形式去绑定,这种绑定之所以生效是因为,我们程序加载 $(function(){}) 的时候绑定了回调,而动态添加上去的,我们并没有去绑定. 所以动态添加的元素,点击的时候并不会触发我们想要的效果.但是实际上,在我们点击的时候,还是产生了点击事件,只是这个事件没有被我们的预期回调处理,因为我们的回调没

jQuery对 动态添加 的元素 绑定事件(on()的用法)

从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代码的时候就注册了相应绑定的事件,我们平常用jQuery给HTML标签绑定(单击)事件是一般这样写 $("#btnId").click(function () { //触发事件后 逻辑 });  但是对用js动态添加的元素 是无效的,即没有绑定单击事件,所以对于动态添加的标签需要用on()来

jQuery给动态添加的元素绑定事件的方法

jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给动态添加的元素绑定事件在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况 例如 1 <div id="testdiv"> 2 <ul></ul> 3 </div> 需要给<ul>里面动态添加的

jQuery-为动态添加的元素绑定事件

样例: $("#modify_nick").click(function () { $(this).css("display","none"); $("#nickname_span").empty(); var input = document.createElement("input"); $(input).attr("type", "text"); $(input

WEB前端技巧之JQuery为动态添加的元素绑定事件

jquery 为动态添加的元素绑定事件 如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上 可以用delegate来实现 .delegate( selector, eventType, handler ) 例如示例: $('someUlSelector').delegate('someLiSelector','click',function(){ //codes... //$(this) for the current jquery instance of

jQuery动态添加的元素绑定事件处理函数代码

jQuery动态添加的元素绑定事件处理函数代码 作者: 字体:[增加 减小] 类型:转载 有一段时间没用jquery了,今天又碰到这个问题.当时是知道有livejquery可以解决.但是我并不喜欢为了这个而另外加载一个. 我当时的处理方法是在添加的时候手工绑定事件处理函数.不过新版的jquery已经添加了这个功能.我们已经不需要为此烦恼了. 参考:http://api.jquery.com/live/ 以前我们定义事件,比如为元素定义单击事件是这样写的: 复制代码 代码如下: $('input'

动态生成DOM元素绑定click事件无效问题

在页面里,jq动态生成dom节点,该节点的click事件无效. 如,html里动态添加class名为.del的<a>, js文件中: $('.del').bind('click',fuction(){ alert('sda'); }) 不响应, 网上说可以用live代替bind事件,但在jq1.7版本开始,就取消了live事件, 解决方法: on()事件 代码改为: $(document).on('click','.del',fuction(){ alert('sda'); }) 这样就搞定了

为动态添加的元素绑定事件

<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"> </script> <script> $(document).ready(function(){ $("body").on('click','p',function(){ $(this).hide(); }); }); </script>

jquery 如何给新生成的元素绑定 hover事件?

$("table tr").live({    mouseenter:    function()    {       //todo    },    mouseleave:    function()    {       //todo    } }); $('ul li').live('mouseenter',function(){ $('#tips').show();}).live('mouseleave',function(){ $('#tips').hide();});