运行function然后按链接
我似乎无法找到我在这里尝试做的一个例子,但我确信这是可能的。
考虑以下:
如何在link
之前单击#main_nav
中的link
之前运行函数?
以下不起作用,因为在运行该函数之前遵循链接。
$('#main_nav a').click(function() { // Some Function });
编辑
我实际上是在点击链接时尝试使用JQuery cookie插件清除cookie。 我不确定这是否相关。
清除cookie代码是:
$.cookie('TMMenu', null);
TMMenu是正确的名称,并加载插件。
编辑
对不起大家。 问题实际上是JQuery Cookie插件文档 。
$.cookie('TMMenu', null);
如自述文件中所述似乎不起作用。 这样做:
$.cookie('TMMenu', null, { path: '/', expires: -5 });
更新 :重新编辑:除了下面的#1之外,我看不出任何其他原因。
我可以想到这个问题的两个答案:
-
您在
#main_nav a
元素存在之前运行jQuery代码,并且没有连接事件处理程序。 将您的脚本放在HTML文件的底部,就在结束标记之前,或者使用
ready
回调 。 -
你在处理程序中做了一些异步操作,而没有看到它发生。 这是因为只要事件处理程序返回,链接就会被跟踪 – 即使你的处理程序启动了一些异步操作。
以下是如何修复第二个(如果你把它放在最后或在一个ready
处理程序内):
$('#main_nav a').click(function(event) { // Remember the link href var href = this.href; // Don't follow the link event.preventDefault(); // Do the async thing startSomeAsyncThing(function() { // This is the completion callback for the asynchronous thing; // go to the link window.location = href; }); });
( 实时复制 | 来源 )
这是你如何做到的。 如果在单击处理程序回调中调用event.preventDefault
,则会阻止默认操作。 然后通过Javascript关注链接,只需使用window.open(url)
或window.location = url
。
简单的Javascript示例
document.querySelector('#main_nav a').addEventListener('click', function (event) { // Do something before following the link // Get url from the target element () href attribute var url = event.target.href; // Open the url in the current window. Set to "_blank" instead of "_self" to open in a new window. window.open(url, '_self'); // Prevent default action (eg following the link) event.preventDefault(); });
jQuery示例
$('#main_nav a').click(function (event) { // Do something before following the link // Get url from the href attribute var url = $(this).attr('href'); // Open the url in the current window. Set to "_blank" instead of "_self" to open in a new window. window.open(url, "_self"); // Prevent default action (eg following the link) event.preventDefault(); });
有关window.open
和window.location
之间差异的更多信息,请参阅MDN。