设置onclick事件,删除之前附加的处理程序

时间:2010-06-04 09:53:28

标签: javascript onclick

以这种方式设置onclick功能有什么区别: obj.onclick=new Function('functionname')

obj.onclick=function(){ functionname();};

如何设置onclick事件删除所有附加的previrius? (使用jquery或简单的javascript) 我尝试这样的事情:

  

$(OBJ).unbind( '点击');

     

$(obj).click(function(){   使用functionName();   });

但是unbind似乎甚至删除了下一个附加事件。 谢谢 编辑:

我使用jquery设置click事件:

function ON(){ 
 $('#makecorr').unbind('click');//i unbind for some reason..    
 $('#makecorr').click(function() { OFF(); }); 
} 
function OFF(){
 $('#makecorr').unbind('click');//i want to remove prev attached fun 
 //and replace it with new event 
 $('#makecorr').click(function() { ON(); }); 
} 

这对我不起作用,当我点击对象'makecorr'它进入循环时,如果我发出警报,它会无限地出现 但是当我使用:'

function ON(){
$('#makecorr').get(0).onclick=new Function('OFF()');
} 
function OFF()
{
 $('#makecorr').get(0).onclick=new Function('ON()');
} 

它有效。我哪里错了?

1 个答案:

答案 0 :(得分:2)

这一行:

$(obj).unbind('click');
$(obj).click(function() { functionname(); });

...如果按上述顺序执行,则只会导致您定义的处理程序被附加。如果你看到其他行为,那么它必须是脚本中的其他内容。

关于

  

以这种方式设置onclick功能有什么区别:   
obj.onclick=new Function('functionname')和   
obj.onclick=function(){ functionname();};

如果您正在动态地向元素添加处理程序,并且由于其他原因您已经在使用jQuery,那么您根本不想使用onclick属性;坚持使用jQuery API,以避免让自己感到困惑。 : - )

即使你没有使用jQuery,你几乎从不想要使用new Function(...)。只有非常特殊的情况才需要。大多坚持function() { functionname(); }(或直接使用functionname)。