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

Updating onclick function within another function not using unbind/removeAttr

本文关键字:函数 另一个 更新 onclick removeAttr unbind      更新时间:2023-09-26

阅读最终版本

我尝试使用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在重置'two_click'的onclick时被设置。

编辑

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

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;
        });

    }

但这似乎有点黑客,我不认为它工作,我仍然有问题-我会再试一次,看看问题在哪里。

我已经尝试了unbinding和removeAttr/attr,试图重新分配,这里解释

JavaScript:使用或不使用jQuery改变onclick的值

这些方法似乎并不是在所有浏览器中都有效

  • 使用jQuery attr("onclick", js)不能同时在Firefox和IE6/7。
  • 使用setAttribute("onclick", js)适用于Firefox和IE8,但不是IE6/7。
  • 使用onclick = function() { return eval(js); }不工作因为你不允许使用return is传递给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})))

重新绑定

//重要- removeAttr:使用'onclick'和unbind:使用'click' -我认为这是我的主要问题!

我不确定我是否应该把这个作为答案,因为解决方案就在我的问题中!为脑衰竭的人感到抱歉。

我知道在问题中它声明"不使用unbind/removeAttr"-这是因为我认为它不能与这些函数一起工作-但这只是由于使用了不同的函数。

不确定你想要实现什么,但要取消绑定点击事件,只需使用$(this).unbind('click')

总结了我成功使用的答案,

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

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