难以理解jQuery的事件对象

时间:2011-07-08 10:07:17

标签: jquery

我正在学习jQuery而且我坚持Event Objects 我没有得到这四个事件对象,我已经通过jQuery文档,但我没有完美地完成它

这四个事件对象将在实际行动中发挥作用吗?

preventDefault()
isDefaultPrevented()
stopPropagation()
isPropagationStopped()

希望得到快速和积极的回应..

4 个答案:

答案 0 :(得分:3)

preventDefault()用于停止触发事件的默认操作。例如,如果您将自定义回调附加到链接的click事件,那么preventDefault()可能会阻止该页面打开(可能是为了进行AJAX调用?)。

stopPropagation()用于阻止事件将DOM冒泡到父元素。例如,如果您有一个树状菜单,并且想要将自定义回调应用于hover事件,而不是其父项,则可以使用此功能。

另外两个只是检查上面两个是否已经使用过。

答案 1 :(得分:3)

要添加@ Pehmolelu的答案和@ Jack's:

return false实际上完成了preventDefault()stopPropagation的工作(但只有当您使用jQuery事件时)。

要使用event对象,必须将其传递给事件处理程序:

$("a").click(function(event) {
    event.preventDefault();
    event.stopPropagation();
});

使用jQuery时,下面的代码&以上是相同的:

$("a").click(function() {
    //your code here
    return false;
});

这个问题涉及类似的领域,应该有所帮助:event.preventDefault() vs. return false

答案 2 :(得分:2)

我不知道所有这些,但你可以使用preventDefault(),例如:

$(a).click(function(e){
  e.preventDefault();
});

所以这会阻止浏览器转到href。它会阻止默认操作。在这种情况下,返回false也基本相同。

编辑:修复它以使用事件:p

答案 3 :(得分:2)

要理解这些概念,您应该了解传播的含义。文档中的元素嵌套在树中。考虑这个例子。

如果点击锚标记会怎样?让我们而不是说点击,说试图杀死锚标记。

您尝试杀死锚标记。它试图为自己辩护,并且默认情况下,它从父亲那里寻求帮助(p标签),而p又从父亲那里寻求帮助(div标签)。现在,如果锚足够强大来防御自己并阻止你杀死它(处理你)怎么办?有没有必要求助?没有?然后如何停止该默认行为。例如,这是通过e.stopPropagation()完成的。 现在考虑锚标签总是咬自己来保护自己。但是这一次,因为你想杀死它,它应该使用枪。如何覆盖这种咬人的默认行为?答案是e.preventDefault()

现在,让我们回到我们的主要故事。单击锚标记时,它的默认行为是什么?它只是跟随链接,导致您离开当前页面。但有时我们的开发人员希望锚标签的响应方式不同。换句话说,有时我们想告诉它,“嘿锚标记,我知道你总是去另一个网页,但请,这次不要那样做”。我们使用e.preventDefault()函数实现此目的;

A sample DOM tree