jQuery慢慢啃之事件(七)

时间:2021-06-25 03:30:22

1.ready(fn)//当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。

$(document).ready(function(){  // 在这里写你的代码...});

使用 $(document).ready() 的简写,同时内部的 jQuery 代码依然使用 $ 作为别名,而不管全局的 $ 为何。

$(function($) { // 你可以在这里继续使用$作为别名... });

2.on(events,[selector],[data],fn)//在选择元素上绑定一个或多个事件的事件处理函数。

data:当一个事件被触发时要传递event.data给事件处理函数。

$("p").on("click", function(){alert( $(this).text() );});//简单方式

function myHandler(event) {
alert(event.data.foo);
}
$("p").on("click", {foo: "bar"}, myHandler)//传递一个jison值给事件event.data中

  $("form").on("submit", false)//取消提交并且取消冒泡

$("form").on("submit", function(event) {event.preventDefault();});//取消当前元素的默认动作,此处是提交

$("form").on("submit", function(event) {event.stopPropagation();});//终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播

3.off(events,[selector],[fn])//在选择元素上移除一个或多个事件的事件处理函数

最好的做法是安装和取下使用命名空间的事件,从而使代码不会无意中删除其他代码附加事件处理程序。

$("p").off()//删除所有的段落的事件

$("p").off( "click", "**" )//删除委托上的所有事件

var foo = function () {  };//定义方法事件
$("body").on("click", "p", foo);//绑定事件
$("body").off("click", "p", foo); //删除某一个事件上的一个方法 var validate = function () {};//定义事件
$("form").on("click.validator", "button", validate);//绑定具有命名空间的事件
$("form").on("keypress.validator", "input[type='text']", validate);//绑定具有命名空间的事件
$("form").off(".validator");//删除命名空间下的所有事件

4.bind(type,[data],fn)//为每个匹配元素的特定事件绑定事件处理函数

type,[data],false //false: 将第三个参数设置为false会使默认的动作失效。

$("p").bind("click", function(){ alert( $(this).text() );});//当每个段落被点击的时候,弹出其文本。

$('#foo').bind('mouseenter mouseleave', function() {$(this).toggleClass('entered');});//同时绑定多个事件类型

$("button").bind({//同时绑定多个事件类型/处理程序
  click:function(){$("p").slideToggle();},
  mouseover:function(){$("body").css("background-color","red");}, 
  mouseout:function(){$("body").css("background-color","#FFFFFF");} 
});

function handler(event) {alert(event.data.foo);}
$("p").bind("click", {foo: "bar"}, handler)
 //事件处理之前传递一些附加的数据

$("form").bind("submit", function() { return false; })//通过返回false来取消默认的行为阻止事件起泡

$("form").bind("submit", function(event){event.preventDefault();});//通过使用 preventDefault() 方法只取消默认的行为。

$("form").bind("submit", function(event){event.stopPropagation();});//通过使用 stopPropagation() 方法只阻止一个事件起泡

5.one(type,[data],fn)//为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。

$("p").one("click", function(){alert( $(this).text() );});

6.trigger(type,[data])//在每一个匹配的元素上触发某类事件。这个函数也会导致浏览器同名的默认行为的执行,如果要阻止这种默认行为,应返回false。

$("form:first").trigger("submit")//触发事件

$("p").click( function (event, a, b) {//先定义事件,在给传递带参数并且触发
// 一个普通的点击事件时,a和b是undefined类型
// 如果用下面的语句触发,那么a指向"foo",而b指向"bar"
} ).trigger("click", ["foo", "bar"]);

$("p").bind("myEvent", function (event, message1, message2) {alert(message1 + ' ' + message2);});//定义自己的事件
 $("p").trigger("myEvent", ["Hello","World!"]);//触发自定义事件

7.triggerHandler(type, [data])//这个特别的方法将会触发指定的事件类型上所有绑定的处理函数。但不会执行浏览器默认动作,也不会产生事件冒泡

这个方法的行为表现与trigger类似,但有以下三个主要区别:

* 第一,他不会触发浏览器默认事件。

* 第二,只触发jQuery对象集合中第一个元素的事件处理函数。

* 第三,这个方法的返回的是事件处理函数的返回值,而不是据有可链性的jQuery对象。此外,如果最开始的jQuery对象集合为空,则这个方法返回 undefined

<button id="old">.trigger("focus")</button>
<button id="new">.triggerHandler("focus")</button><br/><br/>
<input type="text" value="To Be Focused"/>

$("#old").click(function(){$("input").trigger("focus");});
$("#new").click(function(){$("input").triggerHandler("focus");});
$("input").focus(function(){$("<span>Focused!</span>").appendTo("body").fadeOut(1000);});

8.unbind(type,[data|fn]])//bind()的反向操作,从每一个匹配的元素中删除绑定的事件

$("p").unbind()//把所有段落的所有事件取消绑定

  $("p").unbind( "click" )//将段落的click事件取消绑定

删除特定函数的绑定,将函数作为第二个参数传入

var foo = function () {// 处理某个事件的代码};
 $("p").bind("click", foo); // ... 当点击段落的时候会触发 foo
 $("p").unbind("click", foo); // ... 再也不会被触发 foo

9.live(type, [data], fn)//给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。

$('.clickme').live('click', function() {alert("Live handler called."); });//后米添加的元素依然有事件
$('body').append('<div class="clickme">Another target</div>'); $('.hoverme').live('mouseover mouseout', function(event) {// 同时绑定mouseover和mouseout事件
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
}); $("a").live({
  click: function() { // do something on click},
  mouseover: function() { // do something on mouseover }
});

其实.bind(), .live(), .delegate()都是通过.on()来实现的,.unbind(), .die(), .undelegate(),也是一样的都是通过.off()来实现的,

10.die//从元素中删除先前用.live()绑定的所有事件

function aClick() {
$("div").show().fadeOut("slow");
}
$("#unbind").click(function () {
$("#theone").die("click", aClick)
});

11.delegate(selector,[type],[data],fn)//指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

//使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。

$("div").delegate("button","click",function(){  $("p").slideToggle();});

delegate这个方法可作为live()方法的替代,使得每次事件绑定到特定的DOM元素。

以下两段代码是等同的:

$("table").delegate("td", "hover", function(){    $(this).toggleClass("hover");});
$("table").each(function(){ $("td", this).live("hover", function(){ $(this).toggleClass("hover");});});

12.undelegate([selector,[type],fn])//删除由 delegate() 方法添加的一个或多个事件处理程序
$("p").undelegate();//从p元素删除由 delegate() 方法添加的所有事件处理器
$("p").undelegate( "click" )//从p元素删除由 delegate() 方法添加的所有click事件处理器

从form元素删除由 delegate() 方法添加的".whatever"命名空间

var foo = function () { //.....};
//用delegate() 方法给click事件增加".whatever"命名空间
$("form").delegate(":button", "click.whatever", foo);
$("form").delegate("input[type='text']", "keypress.whatever", foo); // 用undelegate()方法删除delegate()方法增加的".whatever"命名空间
$("form").undelegate(".whatever");
13.hover([over,]out)//一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法
$("td").hover//鼠标悬停的表格加上特定的类
( 
function () {
$(this).addClass("hover"); },
  function () {  $(this).removeClass("hover");}
); 14.
toggle([speed],[easing],[fn])
//用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件
//如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。
$('td).toggle();//对表格切换显示/隐藏
$("td").toggle(//对表格的切换一个类
  function () { $(this).addClass("selected");},
function () { $(this).removeClass("selected"); }
);
$("p").toggle("slow");//用600毫秒的时间将段落缓慢的切换显示状态
$("p").toggle("fast",function(){ alert("Animation Done.");});//用200毫秒将段落迅速切换显示状态,之后弹出一个对话框。
$('#foo').toggle(showOrHide);
//相当于
if (showOrHide) {$('#foo').show();} else { $('#foo').hide();}
 
15.blur([[data],fn])//当元素失去焦点时触发 blur 事件
$("p").blur();
$("p").blur( function () { alert("Hello World!"); } );

16.change([[data],fn])//当元素的值发生改变时,会发生 change 事件
$(selector).change();//触发被选元素的 change 事件。
$("input[type='text']").change( function() {  // 这里可以写些验证代码});

17.
click([[data],fn])//触发每一个匹配元素的click事件。
$("p").click();//触发每一个匹配元素的click事件
$("p").click( function () { $(this).hide(); });//将页面内所有段落点击后隐藏

18.
dblclick([[data],fn])//当双击元素时,会发生 dblclick 事件

19.
error([[data],fn])//当元素遇到错误(没有正确载入)时,发生 error 事件。
$(window).error(function(msg, url, line){
jQuery.post("js_error_log.php", { msg: msg, url: url, line: line });
});
$("img").error(function(){
$(this).hide();
});
20.focus([[data],fn])//当元素获得焦点时,触发 focus 事件。
$(document).ready(function()//当页面加载后将 id 为 'login' 的元素设置焦点
{
$("#login").focus();
});

使人无法使用文本框:

$("input[type=text]").focus(function(){  this.blur();});

21.focusin([data],fn)//当元素获得焦点时,触发 focusin 事件,focusin事件跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。 22.focusout([data],fn)//当元素失去焦点时触发 focusout 事件,focusout事件跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况。
23.keydown([[data],fn])//当键盘或按钮被按下时,发生 keydown 事件。
$(window).keydown(function(event){
switch(event.keyCode) {
// ...
// 不同的按键可以做不同的事情
// 不同的浏览器的keycode不同
// 更多详细信息: http://unixpapa.com/js/key.html
// ...
}
}); 24.
keypress([[data],fn])//当键盘或按钮被按下时,发生 keypress 事件
$("input").keydown(function(){
$("span").text(i+=1);
});
25.keyup([[data],fn])//当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。

26.mousedown([[data],fn])//当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件。
$("button").mousedown(function(){
$("p").slideToggle();
});

27.
mouseenter([[data],fn])//当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用。

28.
mouseleave([[data],fn])//当鼠标指针离开元素时,会发生 mouseleave 事件。该事件大多数时候会与mouseenter 事件一起使用 29.mousemove([[data],fn])//当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件。

mousemove事件处理函数会被传递一个变量——事件对象,其.clientX 和 .clientY 属性代表鼠标的坐标

30.mouseout([[data],fn])//当鼠标指针从元素上移开时,发生 mouseout 事件

31.mouseover([[data],fn])//当鼠标指针位于元素上方时,会发生 mouseover 事件

32.mouseup([[data],fn])//当在元素上放松鼠标按钮时,会发生 mouseup 事件。

33.
resize([[data],fn])//当调整浏览器窗口的大小时,发生 resize 事件 34.scroll([[data],fn])//当用户滚动指定的元素时,会发生 scroll 事件 35.select([[data],fn])//当 textarea 或文本类型的 input 元素中的文本被选择时,会发生 select 事件。
36.submit([[data],fn])//当提交表单时,会发生 submit 事件。

37.unload([[data],fn])//在当用户离开页面时,会发生 unload 事件