@omg-two
2017-01-10T02:17:10.000000Z
字数 4802
阅读 862
jQuery
- .click()与.dbclick()
- $ele.click():用于手动指定触发事件,例如
$("ele").click(),则表示主动触发点击事件。- $ele.click(function(eventObject)):绑定元素$ele,每次$ele元素触发点击动作则会调用回调函数。this指向绑定事件的元素。
- $ele.click([eventData],function(eventObject)):接受传递数据参数,同时调用回调函数。
//方法一<div id="test">点击触发<div>$("ele").click(function(){alert('触发指定事件')})$("#test").click(function(){$("ele").click() //手动指定触发事件});//方法二<div id="test">点击触发<div>$("#test").click(function() {//this指向 div元素});//方法三<div id="test">点击触发<div>$("#test").click(11111,function(e) {//this指向 div元素//e.date => 11111 传递数据});
- .mousedown()与.mouseup()
- 三种方法,同上。
- .mousemove()
- 三种方法,同上。
- .mouseover()与.mouseout()
- 三种方法,同上。
- 由于冒泡的方式处理问题,mouseover事件会在后代节点上被触发。
- .mouseenter()与.mouseleave()
- 三种方法,同上。
- mouseenter事件只会在绑定它的元素上被调用,而不会在后代节点上被触发。
- .focusin()
- 当一个元素,或者其内部任何一个元素获得焦点的时候,通过该事件捕获这个动作。
- 三种方法,同上。
- 作用在元素包含的元素上。
- .focuseout()
- 当一个元素,或者其内部任何一个元素失去焦点的时候,通过该事件捕获这个动作。
- 三种方法,同上。
- 作用在元素包含的元素上。
- .hover()
- 鼠标在元素上移进移出动作的捕获。
- $(selector).hover(handlerIn,handlerOut):handlerIn(eventObject),当鼠标指针进入元素时触发执行的事件函数;handlerOut(eventObject),当鼠标指针离开元素时触发执行的事件函数。
// hover()方法是同时绑定 mouseenter和 mouseleave事件。// 我们可以用它来简单地应用在 鼠标在元素上行为$("p").hover(function() {$(this).css("background", 'red');},function() {$(this).css("background", '#bbffaa');});
- focus()与blur()
- 聚焦与离开焦点的事件。作用于元素上。
- 使用例子如下,注意与focusin的作用范围区别。
<h4>.focusin与blur</h4><div class="left"><div class="aaron">点击触发焦点(无反应):<input type="text" /></div><div class="aaron1">点击触发焦点并冒泡:<input type="text" /></div></div><script type="text/javascript">$(".aaron").focus(function() {$(this).css('border', '2px solid red')})$(".aaron1").focusin(function() {$(this).find('input').val('冒泡捕获了focusin事件')})</script>
- change()
- 对于选择类的,比如单选按钮、复选框、下拉选择框等,做出选择时就触发事件。对于值输入类的,比如input文本框、textarea多行文本框等,则当有改变时,失焦后触发事件。
//监听input值的改变$('.target1').change(function(e) {$("#result").html(e.target.value)});
- select()
- 文本选择事件。
- select事件只能用于 < input > 元素与 < textarea > 元素。
- select()下例方法一中,主动触发事件会导致chrome下触发三次,除非在handler函数中返回false。原因不明,疑似与浏览器默认提交有关或冒泡提交有关。
//方法一:触发元素选中事件//.select()$("input").select();//方法二:元素选中操作执行回调handler函数//.$ele.select( handler(eventObject) )<input id="test" value="文字选中"></input>$("#test").select(function() { //响应文字选中回调//this指向 input元素});//方法三:与方法二一致,可接受参数传入//$ele.select( [eventData ], handler(eventObject) )<input id="test" value="文字选中"></input>$("#test").select(11111,function(e) {//响应文字选中回调//this指向 div元素//e.date => 11111 传递数据});
- submit()
- 表单提交元素,三种方法同上。
<input type="submit"> <input type="image"> <button type="submit">以及当某些表单元素获取焦点时,敲击Enter(回车键)都会触发表单提交行为。- form元素默认有表单提交行为,若要通过submi处理的话,需要禁止默认行为。如下所示。
//传统方式e.preventDefault()//jQuery处理方式$("#target").submit(function(data) {return false; //阻止默认行为,提交表单});
- keydown()与keyup()
- 键盘按下与弹起事件。
- 三种方法,手动触发已经绑定事件;直接绑定元素;传递参数。如下:
//直接绑定事件$elem.keydown( handler(eventObject) )//传递参数$elem.keydown( [eventData ], handler(eventObject) )//手动触发已绑定的事件$elem.keydown()
- keypress()
- 效果上与keydown()差不多。
- 只能捕获单个字符,不能捕获组合件
- 无法响应系统功能键,不区分小键盘数字与主键盘数字。
1.理论上,keydown()与keyup()可以绑定到人和网元素,但是事件只发送到具有焦点的元素上。
- .on():绑定事件到元素上。
- 基本用法:on( events ,[ selector ] ,[ data ] )
- 多个事件绑定同一个函数:
$("#elem").on("mouseover mouseout",function(){})- 多个事件绑定不同函数:
$("#elem").on({
mouseover:function(){},
mouseout:function(){},
});- 将数据传递到处理程序:
function greet( event ) {
alert( "Hello " + event.data.name ); //Hello 慕课网
}
\$( "button" ).on( "click", {
name: "慕课网"
}, greet );
- 委托机制:
.on( events ,[ selector ] ,[ data ], handler(eventObject) )
事件绑定在父辈元素上,但是触发留在后代元素上。如下例所示:
//参考下面3层结构<div class="left"><p class="aaron"><a>目标节点</a> //点击在这个元素上</p></div>//给出如下代码:$("div").on("click","p",fn)
事件绑定在最上层div元素上,当用户触发在a元素上,事件将往上冒泡,一直会冒泡在div元素上。如果提供了第二参数,那么事件在往上冒泡的过程中遇到了选择器匹配的元素,将会触发事件回调函数。一般用于动态添加元素时。
- .off():解绑事件。
- 当传入参数时,则删除对应事件;当无参数传入时,默认删除所有事件。
//绑定2个事件$("elem").on("mousedown mouseup",fn)//删除一个事件$("elem").off("mousedown")//删除所有事件$("elem").off("mousedown mouseup")//等价于$("elem").off()
- 事件说明:
- this和event.target的区别:js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;
- this和event.target都是dom对象:如果要使用jquey中的方法可以将他们转换为jquery对象。比如this和(event.target)的使用;
3.event.stopPropagation() 方法:阻止事件冒泡。
事件是可以冒泡的,为防止事件冒泡到DOM树上,也就是不触发的任何前辈元素上的事件处理函数。
- trigger事件:根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为。
- 自定义事件对象,是jQuery模拟原生实现
- 可以传递参数
- 会在dom树上冒泡
- 事件对象event无法完美实现。
$('#elem').on('Aaron', function(event,arg1,arg2) {alert("自触自定义时间")});$('#elem').trigger('Aaron',['参数1','参数2'])
- triggerHandler事件
- 不会触发浏览器默认行为
- 仅仅影响第一个匹配元素。
- 不会再dom树上冒泡
- 返回最后一个处理的事件的返回值,如果没有触发,返回undefined。
<div class="left"><div id="accident"><a>triggerHandler事件</a><input type="text"></div><button>事件冒泡,触发浏览器默认聚焦行为</button><br><br><button>不会冒泡,不触发浏览器默认聚焦行为</button></div><script type="text/javascript">//给input绑定一个聚焦事件$("input").on("focus",function(event,title) {$(this).val(title)});$("#accident").on("click",function() {alert("trigger触发的事件会在 DOM 树中向上冒泡");});//trigger触发focus$("button:first").click(function() {$("a").trigger("click");$("input").trigger("focus");});//triggerHandler触发focus$("button:last").click(function() {$("a").triggerHandler("click");$("input").triggerHandler("focus","没有触发默认聚焦事件");});</script>