在事件之后粘贴另一个处理程序

时间:2013-06-10 13:07:26

标签: jquery html

我的身体中有一个<div>按钮,用jQuery的click

触发一个事件
<div id="pause"><img id="pausebtn" src="pause.png" /></div>

并将一个事件处理程序绑定到此按钮

$('#pause').bind('click', btnHandler);

function btnHandler() { /* something incredible happens here*/ }

我想要做的是,在click #pause处理程序更改为另一个函数之后,让我们说

$('#pause').bind('click', btnHandler2);

任何帮助将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:2)

您需要unbind事件处理程序和bind新事件处理程序。

关于bind()unbind()方法的说明: As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document.

function btnHandler() {
  // unbind old event - supply the handler here so nothing else gets unbound
  $('#pause').off('click',btnHandler);
  // rebind new event
  $('#pause').on('click',btnHandler2);
}

$('#pause').on('click',btnHandler);

.bind().on()之间的区别在于能够使用.on()方法创建委托事件。委托事件绑定到“目标”父级,必须在绑定事件时存在。通过提供后代选择器,您可以为所述父级中包含的所有元素触发此事件并匹配给定的选择器

示例:

// this will be triggered for any element with class 'bla' 
// inside the body tag, no matter when said element was added.
$('body').on('click','.bla',console.log);

答案 1 :(得分:2)

使用.one()注册一个只运行一次的事件处理程序

$('#pause').one('click', btnHandler);

function btnHandler() {
     $(this).on('click',btnHandler2);
}

答案 2 :(得分:1)

您可以在第一个事件处理程序中执行此操作:

function btnHandler(event) {
    $(this).unbind();
    $(this).bind('click', btnHandler2);
}

答案 3 :(得分:0)

你可以在函数中取消绑定事件.i.e。

function btnHandler(event){
    //your code
    $(this).unbind(event);
    $('#pause').bind('click', btnHandler2);
}