【问题标题】:Add parameters to an URL from a <a href> just clicked从刚刚单击的 <a href> 向 URL 添加参数
【发布时间】:2012-09-28 16:21:07
【问题描述】:

场景是很多 html 文件,它们之间有很多链接。当我调用其中的第一个(它将是索引)时,链接会通过 URL 传递几个参数(我们可以将它们称为首选项)。

现在我希望,当单击页面的多个链接中的任何一个时,将添加这些参数。所以这个问题与其他问题(How to add parameters to a URL that already contains other parameters and maybe an anchor)类似,但在点击链接后才这样做。

我知道一种解决方案可能是更改每个链接上的 onclick 事件,但由于可能有数千个,没有常规的 url 格式...我'正在寻找一个可以在头部脚本上的解决方案;可能与 onbeforeunload 事件有关。

反正我找不到怎么做。有什么想法吗?

【问题讨论】:

  • 那么这些参数会随着每个请求移动吗?对吗?

标签: javascript


【解决方案1】:

我想一种方法是在页面加载时将 clickevent-listener 附加到所有锚元素,而不是更改每个链接的 onclick 属性或使用 onbeforeunload 事件。然后回调可以拦截浏览器的默认行为以跟随链接。然后,您可以获得刚刚单击的 a 元素的 src 属性,将所需的首选项添加到 URL,然后通过将 window.location.href 设置为正确的 URL,将用户发送到正确的位置(包括首选项)。

MDN 上有一个关于事件监听器的great aricle,我相信它会对你有所帮助。 特别注意关于旧版本 IE 的部分

一个非常粗略的例子:

function callback(e){
  // Get the src of the clicked a-element
  var src = this.src;
  // Add preferences to the url, this need 
  // improvement depending on your needs
  src += "?somesetting=foo";
  // Send user to the url with preferences
  window.location.href = src;
}

// Get all anchors on page
var anchors = document.getElementsByTagName("a");

// Loop over the elements and attach listener
for(i=0 ; i < anchors.length ; i++){
  // Extend with support for older IE if needed
  anchors[i].addEventListener("click", callback, false});
}​

【讨论】:

    【解决方案2】:

    这将在单击时将一个字符串附加到任何包含 href 属性的内容:

    window.addEventListener("click", function(e) {
        var href = e.target.getAttribute("href");
        if(href) {
            location.href = href + "?q=stackoverflow";
            e.preventDefault();
        }
    });​
    

    此处示例:http://jsfiddle.net/E5Q7P/

    在中不起作用

    【讨论】:

    • 成功了!非常感谢。顺便说一句:我在 Android 应用程序中使用它,包括 PhoneGap。当我在 Mozilla Firefox 10.0.7(在 Linux 上运行)上尝试它时,它不起作用。
    • 我认为 srcElement 是问题所在。那是一个 IE 属性,正确的属性将是目标。似乎由于某种原因,chrome 也实现了 srcElement 。我已经相应地更改了代码。
    猜你喜欢
    • 2014-08-08
    • 2015-07-23
    • 2012-05-30
    • 2011-01-27
    • 2021-07-18
    • 2018-12-27
    • 2012-11-06
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多