jQuery on()方法

jQuery on()方法是官方推荐的绑定事件的一个方法。

$(selector).on(event,childSelector,data,function,map)

由此扩展开来的几个以前常见的方法有.

bind()

  $("p").bind("click",function(){
    alert("The paragraph was clicked.");
  });

  $("p").on("click",function(){
    alert("The paragraph was clicked.");
  });

delegate()

  $("#div1").on("click","p",function(){
    $(this).css("background-color","pink");
  });
  $("#div2").delegate("p","click",function(){     $(this).css("background-color","pink");   }); live()   $("#div1").on("click",function(){     $(this).css("background-color","pink");   });
  $("#div2").live("click",function(){     $(this).css("background-color","pink");   });

以上三种方法在jQuery1.8之后都不推荐使用,官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法。

tip:如果你需要移除on()所绑定的方法,可以使用off()方法处理。

$(document).ready(function(){
  $("p").on("click",function(){
    $(this).css("background-color","pink");
  });
  $("button").click(function(){
    $("p").off("click");
  });
});

tip:如果你的事件只需要一次的操作,可以使用one()这个方法

$(document).ready(function(){
  $("p").one("click",function(){
    $(this).animate({fontSize:"+=6px"});
  });
});

trigger()绑定

$(selector).trigger(event,eventObj,param1,param2,...)
$(document).ready(function(){
  $("input").select(function(){
    $("input").after(" Text marked!");
  });
  $("button").click(function(){
    $("input").trigger("select");
  });
});

多个事件绑定同一个函数

$(document).ready(function(){
  $("p").on("mouseover mouseout",function(){
    $("p").toggleClass("intro");
  });
});

多个事件绑定不同函数

$(document).ready(function(){
  $("p").on({
    mouseover:function(){$("body").css("background-color","lightgray");},  
    mouseout:function(){$("body").css("background-color","lightblue");}, 
    click:function(){$("body").css("background-color","yellow");}  
  });
});

绑定自定义事件

$(document).ready(function(){
  $("p").on("myOwnEvent", function(event, showName){
    $(this).text(showName + "! What a beautiful name!").show();
  });
  $("button").click(function(){
    $("p").trigger("myOwnEvent",["Anja"]);
  });
});

传递数据到函数

function handlerName(event) 
{
  alert(event.data.msg);
}

$(document).ready(function(){
  $("p").on("click", {msg: "You just clicked me!"}, handlerName)
});

适用于未创建的元素

$(document).ready(function(){
  $("div").on("click","p",function(){
    $(this).slideToggle();
  });
  $("button").click(function(){
    $("<p>This is a new paragraph.</p>").insertAfter("button");
  });
});


本文实例讲述了jQuery中on()方法用法。分享给大家供大家参考。具体分析如下:

此方法可以在匹配元素上绑定一个或者多个事件处理函数。
使用off()方法可以删除on()方法绑定的事件。

语法结构一:

复制代码 代码如下:
$(selector).on(events,[selector],[data],fn)

参数列表:

参数描述
events一个或多个用空格分隔的事件类型和可选的命名空间。
selector可选。一个选择器字符串,用以过滤选定的元素,该选择器的后裔元素将调用处理程序。
如果选择是空或被忽略,当它到达选定的元素,事件总是触发。
data可选。作为event.data属性值传递给事件对象的额外数据对象以供事件处理函数处理。
fn该事件被触发时执行的函数。 false值也可以做一个函数的简写,返回false。

实例代码:

实例一:

复制代码 代码如下:

< !DOCTYPE html>
< html>
< head>
< meta charset=" utf-8">
< meta name="author" content="http://www.jb51.net/" />
< title>脚本之家</title>
< style type="text/css">
div{
  width:60px;
  height:60px;
  border:1px solid green;
  font-size:12px;
}
< /style>
< script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
< script type="text/javascript">
$(document).ready(function(){
  $("div").on("click",function(){
    $(this).text("脚本之家欢迎您");
  })
})
< /script>
< /head>
< body>
< div>原来内容</div>
< /body>
< /html>

以上代码为div绑定一个click事件,点击div时候能够为div设置新的文本内容。

实例二:

复制代码 代码如下:

< !DOCTYPE html>
< html>
< head>
< meta charset=" utf-8">
< meta name="author" content="http://www.jb51.net/" />
< title>脚本之家</title>
< style type="text/css">
div{
  width:60px;
  height:60px;
  border:1px solid green;
  font-size:12px;
}
< /style>
< script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
< script type="text/javascript">
$(document).ready(function(){
  $("div").on("click mousemove",function(){
    $(this).text("脚本之家欢迎您");
  })
})
< /script>
< /head>
< body>
< div>原来内容</div>
< /body>
< /html>

以上代码为div绑定了两个事件,无论是点击div还是在div中移动鼠标都会为div设置新的文本内容。

实例三:

复制代码 代码如下:

< !DOCTYPE html>
< html>
< head>
< meta charset=" utf-8">
< meta name="author" content="http://www.jb51.net/" />
< title>脚本之家</title>
< style type="text/css">
div{
  width:60px;
  height:60px;
  border:1px solid green;
  font-size:12px;
}
< /style>
< script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
< script type="text/javascript">
$(document).ready(function(){
  var newtext="这是新文本"
  $("div").on("click",{"mytext":newtext},function(e){
    $(this).text(e.data.mytext);
  })
})
< /script>
< /head>
< body>
  <div>原来内容</div>
< /body>
< /html>

以上代码利用data参数为绑定的事件处理函数传递数据。

实例四:

复制代码 代码如下:

< !DOCTYPE html>
< html>
< head>
< meta charset=" utf-8">
< meta name="author" content="http://www.jb51.net/" />
< title>脚本之家</title>
< style type="text/css">
.parent{
  width:160px;
  height:160px;
  border:1px solid green;
  font-size:12px;
}
.children{
  width:100px;
  height:100px;
  border:1px solid red;
}
span{background-color:green;}
< /style>
< script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
< script type="text/javascript">
$(document).ready(function(){
  var newtext="这是新文本"
  $(".parent").on("click",".children",{"mytext":newtext},function(e){
    $(this).text(e.data.mytext);
  })
})
< /script>
< /head>
< body>
< div class="parent">
  <div class="children"><span>原来内容</span></div>
< /div>
< span>大家好</span>
< /body>
< /html>

以上代码通过通过选择器字符串来过滤匹配元素的子元素中哪些可以响应绑定的事件。上面的代码中,类名为children的元素和它的子元素可以调用绑定的事件。
语法结构二:

复制代码 代码如下:
$(selector).on(object,[selector],[data])

参数列表:

参数描述
object一个用字符串表示的,一个或多个空格分隔的事件类型和可选的命名空间,值表示事件绑定的处理函数。
selector可选。一个选择器字符串,用以过滤选定的元素,该选择器的后裔元素将调用处理程序。
如果选择是空或被忽略,当它到达选定的元素,事件总是触发。
data可选。作为event.data属性值传递给事件对象的额外数据对象以供事件处理函数处理。

实例代码:

复制代码 代码如下:

< !DOCTYPE html>
< html>
< head>
< meta charset=" utf-8">
< meta name="author" content="http://www.jb51.net/" />
< title>脚本之家</title>
< style type="text/css">
div{
  width:160px;
  height:160px;
  border:1px solid green;
  font-size:12px;
}
< /style>
< script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
< script type="text/javascript">
$(document).ready(function(){
  var newtext="这是新文本"
  $("div").on({click:function(e){
    $(this).text(e.data.mytext);
  }},{"mytext":newtext})
})
< /script>
< /head>
< body>
  <div>原来内容</div>
< /body>
< /html>

以上代码中,事件类型和事件处理函数以对象的形式绑定的。

希望本文所述对大家的jQuery程序设计有所帮助。




前几天在看《jquery基础教程》,看到事件委托的时候,关于live()方法讲的不是很详细,就去搜了一下关于live()和delegate()的。

然后在一处看到live()已经被移除了,囧,然后去看了最新的jq源码,果然被移除了,现在是1.9.1版本,不知道live()是在之前哪个版本被移除的,惭愧啊,之前都没留意。

看源码发现bind()和delegate()都是由on()实现的。on()的描述如下:

复制代码 代码如下:

.on( events [, selector ] [, data ], handler(eventObject) )

一个简单的事件绑定如 $('button').on('click',function(){}); 与bind()无二样。

在需要为较多的元素绑定事件的时候,优先考虑事件委托,可以带来性能上的好处。比如:

   

如上图,将click事件绑定在document对象上,页面上任何元素发生的click事件都冒泡到document对象上得到处理。

注意到.on()的描述中第二个可选参数:selector。如下图,添加了第二个参数,选择符button:


结果:

当事件冒泡到document对象时,检测事件的target,如果与传入的选择符(这里是button)匹配,就触发事件,否则不触发。

注意.on()也可以接收一个对象参数,该对象的属性是事件类型,属性值为事件处理函数。下面是官方文档的一个例子:

最后有一点,原先的live()方法,处理函数是默认绑定在document对象上不能变的,如果DOM嵌套结构很深,事件冒泡通过大量祖先元素会导致较大的性能损失。而使用.on()方法,事件只会绑定到$()函数的选择符表达式匹配的元素上(上面我的例子中,为了简单绑定到了document),因此可以精确地定位到页面中的一部分,而事件冒泡的开销也可以减少。delegate()与on()同理,毕竟是用on()实现的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值