2009-11-13 43 views
0

我想知道如何重新绑定正常链接的以前的行为! 例如:重新绑定上一个事件

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick')); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

function addDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if($(this).data('onclick')!='') 
      $(this).attr('onclick',$(this).data('onclick')); 
    }); 
}; 

我试图以前的行为存储在各链路的数据对象。但是这不起作用! 任何建议,如何恢复链接的以前和默认行为! THX

马库斯

+0

你怎么调用这些方法?你确定你传递给他们jquery对象吗?或者你应该调用$(objects).each()而不是objects.each()? – Lobstrosity 2009-11-13 17:43:06

回答

0

不要试图处理onclick和其他事件处理程序作为字符串,因为DOM setAttribute或jQuery attr会做。函数不能被适当地串行化为一个字符串。相反,使用正常的DOM事件处理性能,如element.onclick获取和设置真正的函数对象:

function falsefunction() { 
    return false; 
} 
function nofunction() { 
    return; 
} 

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if (this.onclick) 
      $(this).data('onclick', this.onclick); 
     this.onclick= falsefunction; 
    }); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.each(function(){ 
     var onclick= $(this).data('onclick'); 
     this.onclick= onclick? onclick : nofunction; 
    }); 
} 

然而,杂耍事件处理程序一样,这是一个有点味道,通常意味着你会更好用bind

function preventDefault(event) { 
    event.preventDefault(); 
} 

function removeDefaultBehaviour(objects){ 
    objects.bind('click', preventDefault); // or objects.click(preventDefault); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.unbind('click', preventDefault); 
} 
+0

Thx很多!你的第二个建议太棒了! ;) – 2009-11-13 19:04:02

0

试试这个:

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick').toString()); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

没有的toString()函数,你不会得到onclick事件的代码内容,你只会得到 “的onclick(事件)” 。

0

通过$(this).attr('onclick')返回的数据是最有可能的一个功能。

因此在设置你需要再次封装成函数

$(this).attr('onclick',function(){return $(this).data('onclick')}); 

否则函数被执行,而不是设置。