我知道有很多关于这个概念的文章,但我的问题有一点不同。
在我的页面上,我有一个链接:
<a id="mylink">click me </a>
然后我使用:
动态更改href$get('mylink').href = 'javascript:doSomething(id);';
碰巧我必须多次调用上面的代码,所以我用javascript代码覆盖href属性的当前值,用不同的id参数调用相同的函数。
以上就是我现在使用的很长时间了。但是当我试图实施OnNavigateAway以在用户关闭浏览器窗口时警告用户时,这个混乱开始了。当用户单击具有href属性值的锚点时,IE也会触发此onNavigateAway事件。
所以我开始用jquery点击事件替换那些href:
$("#mylink").click(function (e) {
doSomething(id);
e.preventDefault();
});
但请记住,这段代码可以被多次调用,所以我必须首先取消绑定click事件然后再绑定:
function completed(result) {
$("#mylink").unbind('click');
$("#mylink").click(function (e) {
doSomething(result.id);
e.preventDefault();
});
}
这是处理我的JavaScript的好方法吗?或者这种绑定和解除绑定的东西没有好的做法?
另一种方法是使用javascript手动覆盖onclick属性。
你会如何处理?
我期待着你的回复。
答案 0 :(得分:4)
我会在这里使用不同的逻辑。我将只更改一些数据属性,然后在“全局”单击事件中使用此属性,而不是重新分配click事件:
$("#mylink").on("click", function (e) {
doSomething($(this).data("id"));
e.preventDefault();
});
然后当您需要更改id
有这样的代码时:
$("#mylink").data("id", id);
这种方式重复调用更改数据只会导致最后一次影响,例如
$("#mylink").data("id", 5);
$("#mylink").data("id", 6);
$("#mylink").data("id", 7);
单击时,7将传递给该函数。
如果元素是动态创建的并且假设您使用的是jQuery 1.7或更高版本,则可以使用.on
来捕获那些动态创建的元素:
$("body").on("click", "#mylink", function (e) {
doSomething($(this).data("id"));
e.preventDefault();
});