【问题标题】:html loads a new page before the jquery finishes the executionhtml 在 jquery 完成执行之前加载一个新页面
【发布时间】:2020-10-03 06:34:32
【问题描述】:

我想在单击 带有链接的锚 html 标记时更改 jquery 中变量的值,此标记也会加载新页面,但是当我单击该锚标记时会加载新页面,但是变量值没有改变。

我在网上查了一下,发现这是由于 jquery 的异步特性造成的。

这是我的代码:-


var req;
$(document).ready(function(){
    $('header').load("navbar.html");
    $('footer').load("footer.html");
    $('#veg-caterer').click(function(){
        req = "c1";
    });
});


在上面的代码中,当我在更改 req

的值之前单击#veg-caterer 时会加载新的 html 页面

我正在使用警报检查其他页面上 req 的值,它显示未定义这里是代码:-

$(document).ready(function(){
    alert(req);
});

我试过使用 URL get parameterssetTimeout 但我也面临同样的问题。我知道它的基本但我对 jquery 和 js 有点陌生。请解释你的答案

我的主要动机是在单击带有链接的锚标记时将值传递给其他 js 文件

【问题讨论】:

  • 锚标签不加载新页面。他们滚动到现有页面中的位置。因此,也许您还有其他功能正在运行。关于您的变量更改,您可以尝试 onmousedown 而不是单击,以便它在完成单击之前执行。你可以做 event.stopPropagation() 或 event.preventDefault()
  • 我正在做 <a id = "veg-caterer" href="all.html"> 这会加载新页面
  • 那是一个链接,而不是一个锚点。一个锚是
  • 其实你是对的。我站得更正了。它只是术语“锚”不经常使用,因此有时被认为是现有页面的锚。
  • 我猜该变量仍然设置,但由于新页面加载它并不重要。离开页面时,所有变量都会被删除。您将需要使用查询参数或持久存储(cookies、sessionStorage...)。有关跨页面保存的更多详细信息,请参阅此问题:stackoverflow.com/questions/29986657/…

标签: javascript jquery ajax asynchronous-javascript


【解决方案1】:

你可以在点击事件上做一个preventDefault,然后在你设置好req的值之后手动设置页面的位置

$('#veg-caterer').click(function(e){
    e.preventDefault();
    req = "c1";
    window.location = e.currentTarget.getAttribute('href');
});

【讨论】:

  • 如果需要将值传递到新页面,则需要使用查询参数或持久存储,如here所述
  • 毕竟我使用的是本地存储,在效率和安全性方面使用它会是一个好的解决方案吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2021-08-02
  • 1970-01-01
  • 2010-11-28
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多