jQuery click(false) 结合一个函数
Posted
技术标签:
【中文标题】jQuery click(false) 结合一个函数【英文标题】:jQuery click(false) combined with a function 【发布时间】:2011-03-12 23:10:28 【问题描述】:我想防止“#”被使用,因为我正在使用 jQuery 来通过点击插件做其他事情......
<a href="#" id="mylink">My Link</a>
<script>
$('#mylink').somePlugin().click(false);
</script>
每当我需要阻止默认点击时,上述方法都能很好地工作。
现在我在下面有这样的东西,我想阻止默认的点击行为
<a href="#" id="mylink">My Link</a>
$('#mylink').click( function ()
// my code in here
);
我只是不确定在哪里/如何将 click(false) 合并到上面的代码中。我尝试过的几件事都不起作用。
我知道...我感觉像个新手问这个问题。
谢谢!
【问题讨论】:
【参考方案1】:你需要做的:
$('#mylink').click( function (e)
e.preventDefault();
// the code here
);
【讨论】:
我正在使用它,但认为只有一种方法可以合并点击(错误)。谢谢! 不需要合并 click false,preventDefault 是一个符合标准的函数,用于此目的,并且在 jQuery 中使用得益于其跨浏览器兼容性保险(与所有 jQuery 功能一样大) ,所以没有必要使用其他任何东西,除了正如所指出的,stopPropagation 来阻止事件冒泡,即如果你显示一个隐藏的嵌套 ul,父 li 也将被显示(如果隐藏)。 可以简单介绍一下click(false)吗?【参考方案2】:$('#mylink').click( function (e)
return false;
);
【讨论】:
e.preventDefault();是正确的方法。如果你返回 false,你也会停止事件冒泡。 @我知道吗。有人对你投了反对票,我在问为什么。 (我投票支持) 我也没有投反对票,但我正在阅读为什么不在这里使用“return false”...fuelyourcoding.com/jquery-events-stop-misusing-return-false @Bjarkireturn false
也是可以接受的。它更短,并且不需要您将事件对象指定为参数。【参考方案3】:
不同的浏览器处理这个问题的方式略有不同,但 jQuery 会尽力满足您的要求。您应该了解三件事,并且至少应该完成其中的前两件事,以防止在尽可能多的浏览器中出现正常的点击行为:
点击处理程序末尾的return false;
(如 Am suggested)将停止许多浏览器(包括 Internet Explorer 和 Google Chrome)中链接的常规点击操作。 return false;
也将停止事件传播,这可能是也可能不是你想要的。这是常规的浏览器行为,与 jQuery 没有任何关系。
e.preventDefault();
,因为 Liam 的 suggested 是防止触发默认操作的 jQuery method。 “例如,单击的锚点不会将浏览器带到新的 URL。” 这只会影响当前项目。
e.stopPropagation();
是另一个防止事件冒泡的jQuery method。例如,如果您在 div 中有一个锚点,并且该 div 挂钩了一个点击事件,那么即使您停止锚点,也会触发该 div 的点击事件 - 除非您调用此方法。
数字 2 将涵盖几乎所有的浏览器,而将 1 和 2 组合起来,您或多或少地涵盖了所有浏览器。仅当您不希望事件在 DOM 树中冒泡时,数字 3 才是必需的,但我养成了将它放在那里的习惯,因为大多数情况下,如果我想阻止对单击的元素的默认操作,我不希望任何事情发生,除了这个特定的处理程序中的代码。
【讨论】:
@ThomaspreventDefault
和 stopPropagation
不是 jQuery 方法,但它们是由 DOM Events standard 定义的(它们已经存在了一段时间)。请注意,jQuery 对事件对象进行了规范化,因此这两种方法可以在所有浏览器中使用。
是的——很好的解释。那么 .click(false) 在哪里适合这一切呢?我希望通过使用它,我只是让 jQuery 处理它。
@Sparky click(false)
根本不适合这个。不要使用它。 click
方法应该没有参数或函数参数。不要将false
值传递给它。
@Šime Vidas - 我从 jQuery 插件开发人员那里得到 click(false),他说可以与 1.4.2 以上版本的 jQuery 一起使用。你有什么我可以阅读的更多参考资料吗?
@Šime:您自己说过:jQuery 规范化了事件对象,因此它们是 jQuery 对 jQuery 定义的对象定义的方法。它们与某些 javascript 引擎中的原始方法具有相同名称的事实是另一回事;)以上是关于jQuery click(false) 结合一个函数的主要内容,如果未能解决你的问题,请参考以下文章
jquery checkbox选中改变状态change和click事件