在不使用unbind / removeAttr的另一个函数中更新onclick函数

时间:2011-07-21 10:19:03

标签: javascript jquery onclick

阅读解决方案的最终修改

我尝试使用jquery更新链接的onclick功能。

示例最好解释一下:

HTML

<a href='' id='one_click' onclick='do_things_here("fighter","bitter",2)'>first clicker</a>

<a href='' id='two_click' onclick='do_things_here("abc","xyz",1)'>second clicker</a>

js(类似这样的东西 - 我从逻辑上说这不是正确的)

function do_thing_here(data, info, source){

  *//things happen here*

  $('#two_click').click(function() {
    do_things_here(data,info,source)
    return false;

    });


}

当它进入递归循环时不起作用,因为do_things_here在重置'on_lick'上的onclick时会被设置。

修改

我试图设置一个重置标志,以防止在重新设置onclick时运行do_things_here

function do_thing_here(data, info, source,reset){
      if (reset){
           return false;
      }


      *//things happen here*

      $('#two_click').click(function() {
        do_things_here(data,info,source,true)
        return false;

        });


    }

但这看起来确实有点黑客,我觉得它没有用,我还有问题 - 我会再试一次,看看问题在哪里。

我已经尝试解除绑定并删除了Attr / attr以尝试重新分配,如此处所述

JavaScript: changing the value of onclick with or without jQuery

这些方法似乎并不适用于所有浏览器

  
      
  • 使用jQuery attr("onclick", js)不适用于Firefox和   IE6 / 7。
  •   
  • 使用setAttribute(“onclick”,js)可以与Firefox和IE8一起使用,   但不是IE6 / 7。
  •   
  • 使用onclick = function() { return eval(js); }不起作用   因为你不允许使用return是传递给eval()的代码。
  •   

我已经尝试清除html中的onclick函数,因此没有设置为默认值,但没有任何效果。

我可以简单地重置/重新链接如下链接

<span id='change_two'><a href='' id='two_click' onclick='do_things_here("abc","xyz",1)'>second clicker</a></span>

然后

 function do_thing_here(data, info, source){

      *//things happen here*

      $('#change_two').html("<a href='' id='two_click' onclick='do_things_here('+data+','+info+','+soutce+')'>second clicker</a>");


    }

或类似的东西,但我想知道是否有更好的清洁方法吗?

----编辑:解决方案解释----

仅适用于搜索此页面的人:

如果您通过html设置onclick,则需要removeAttr($(this).removeAttr('onclick')

如果你通过jquery设置它(如上面例子中的第一次点击之后)那么你需要解除绑定($(this).unbind('click')

然后你只需用bind($(this).bind('click',function(event){//the code/function call}))

重新绑定

// important - removeAttr:使用'onclick'并取消绑定:使用'click' - 我认为这是我的主要问题!

我不确定是否应该将此作为答案发布,因为解决方案就在我的问题中!对不起大脑失败的人。

我在问题中表示“不使用unbind / removeAttr” - 这是因为我认为它不能使用这些函数 - 但这只是因为使用了不同的函数。

2 个答案:

答案 0 :(得分:2)

不确定您要实现的目标,但要取消绑定点击事件,只需使用$(this).unbind('click')

答案 1 :(得分:0)

我成功使用的总结答案,

如果您通过html设置onclick,则需要removeAttr($(this).removeAttr('onclick'))

如果你通过jquery设置它(如上面的例子中的第一次点击之后)那么你需要解绑($(this).unbind('click'))