2

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

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

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

但是请记住,这段代码可以被多次调用,所以我必须先取消绑定点击事件,然后再重新绑定:

function completed(result) { 
$("#mylink").unbind('click'); 
    $("#mylink").click(function (e) {
    doSomething(result.id);
    e.preventDefault();
    });
}

这是处理我的javascript的好方法吗?还是这种绑定和解除绑定的东西不是好的做法?

另一种方法是使用 javascript 手动覆盖 onclick 属性。

你会怎么处理这个?

我期待着您的回复。

4

1 回答 1

4

我会在这里使用不同的逻辑。我不会重新分配单击事件,而是更改一些数据属性,然后在“全局”单击事件中使用此属性:

$("#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();
});
于 2012-04-17T10:55:25.450 回答