有没有人知道为什么我的preventDefault代码不起作用? return false返回正常,但我的理解是,这不是真正的“正确”方式吗?
if ($('.signup').length == 0) {
$('.star').on('click',function(e){
e.preventDefault();
var starElement = $(this);
var resourceId = starElement.parents('li').data('id');
updateFavoritesSpan( starElement, starElement.hasClass('starred') );
starElement.toggleClass('starred');
starElement.parents('li').toggleClass('fvtd');
});
// voting
$('.voting').on('click .up', function(e){
e.preventDefault();
sendVote($(this), 1);
});
$('.voting').on('click', '.down', function(e){
e.preventDefault();
sendVote($(this), -1);
});
}
答案 0 :(得分:7)
return false;
同时执行preventDefault
和stopPropagation
。
preventDefault
停止元素上的“默认”操作,stopPropagation
会阻止事件冒泡到父元素。
我的猜测是,当你只preventDefault
时,父母的某个事件仍会被触发。
答案 1 :(得分:3)
return false
与preventDefault()
不同。
事实上return false
是以下的组合或简写:
preventDefault()
stopPropagation()
因此,请尝试添加此项(以及e.preventDefault()
):
e.stopPropagation();
答案 2 :(得分:2)
有一个错字,改变这个:
$('.voting').on('click .up', function(e){
为:
$('.voting').on('click', '.up', function(e){
答案 3 :(得分:0)
为了完整性:
return false也会触发
stopImmediatePropagation()取消同一元素上的所有后续处理程序(在处理touchend事件时可能会派上用场,意味着取消后续点击)