我有这个JavaScript函数:
function putVote(trackid, vote) {
}
我通过以下方式调用此函数:
<a href="#" onClick="putVote('data1', 'data2')">Link</a>
我想在
putVote()
上使用e.preventDefault();
,但我觉得我的做法有误。我该如何做呢?谢谢!
我有这个JavaScript函数:
function putVote(trackid, vote) {
}
我通过以下方式调用此函数:
<a href="#" onClick="putVote('data1', 'data2')">Link</a>
putVote()
上使用e.preventDefault();
,但我觉得我的做法有误。我该如何做呢?最简单的方法是在处理程序中使用return false
(如果处理程序有return putVote('data1', 'data2)
,则return false
只会在putVote
中起作用)。
但正如Pointy所说,更好的技术是从JavaScript中附加事件处理程序,最简单的方法是使用jQuery或Prototype等库/框架。
e.preventDefault();
阻止事件的默认操作(如跟随链接),但不会停止事件从DOM中冒泡。返回 false
则两者都会阻止。 - josh3736false
确实会停止传播(以及取消默认操作),因为jQuery调用event.stopPropagation()
如果处理程序函数返回false
。然而,内联事件处理程序早在事件冒泡的概念出现之前就已经存在,所以返回false
只能防止默认操作。当然,无论如何都不应该使用内联事件处理程序... - josh3736<a href="#" onClick="putVote('data1', 'data2'); return false;">Link</a>
$("#link").click(function(evt) {
evt.preventDefault();
putVote('data1', 'data2');
});
HTML:
<a href="#" id="link">Link</a>
如果您正在使用最新版本的jQuery和HTML5文档类型。
JS:
$("#link").click(function(evt) {
evt.preventDefault();
var $self = $(this);
putVote($self.data("one"), $self.data("two"));
});
HTML:
<a href="#" id="link" data-one="data1" data-two="data2">Link</a>
<a href="#" class='data-clickable' data-click-params='["data1", "data2"]'>Link</a>
$('a.data-clickable').click(function(e) {
var elementData = $(this).data('click-params');
//
// ... handle the click ...
//
e.preventDefault();
});
在这种情况下,"elementData"变量最终将成为一个包含两个值"data1"和"data2"的数组。您可以给"data-foo"属性赋予JSON表示的值,并且当您使用jQuery的".data()"方法获取属性时,它会自动解码JSON。
putVote
,然后在那里调用preventDefault()
。 - pimvdb