在不使用unbind/removeAttr的另一个函数中更新onclick函数
Updating onclick function within another function not using unbind/removeAttr
阅读最终版本
我尝试使用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
使用setAttribute("onclick", js)适用于Firefox和IE8,但不是IE6/7。attr("onclick", js)
不能同时在Firefox和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'))
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- 多次调用另一个javascript函数中的javascript函数
- 使用JS函数来使用另一个函数的语法?node.js
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 另一个Ajax函数触发的Ajax函数不起作用
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 从另一个函数获得$this值
- 如何记录调用另一个函数的函数的返回值
- 它在另一个函数中嵌套后不会输出文本
- 如何将自动完成的值传递到另一个函数中
- 将一个函数作为参数传递给javascript中的另一个函数
- 同一事物的两个函数,一个崩溃,另一个不崩溃,为什么
- 从另一个函数延迟解析的返回
- 多次调用promise函数,直到另一个promise函数满足条件