@omg-two
2017-01-10T02:17:10.000000Z
字数 4802
阅读 787
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>