我该怎么称呼我的javascript。 href,onclick或绑定click事件?

时间:2012-04-17 10:46:18

标签: javascript-events event-handling jquery

我知道有很多关于这个概念的文章,但我的问题有一点不同。

在我的页面上,我有一个链接:

<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属性。

你会如何处理?

我期待着你的回复。

1 个答案:

答案 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将传递给该函数。

Live test case

如果元素是动态创建的并且假设您使用的是jQuery 1.7或更高版本,则可以使用.on来捕获那些动态创建的元素:

$("body").on("click", "#mylink", function (e) {
    doSomething($(this).data("id"));
    e.preventDefault();
});