【问题标题】:Pass a url return from JS function into href将 JS 函数返回的 url 传递给 href
【发布时间】:2017-02-02 21:07:23
【问题描述】:

我还是 JS 和 HTML5 的新手

所以我有一个存储在 var 中的 URL

var Base_URL = "https://www.mywebsite.com/info?username";

链接到可以访问 用户名 值的数据库,该值可以包含空格。

我把这个url解析成一个函数

function removeSpaceURL(url) {
var update = url.split(' ').join('%20');
return update;
}

这不是我所知道的最好的方法,但它的效果已经足够好。

我卡住的地方是我想将 update 返回到 href 引用中,以便我可以点击它。

    <p><a href="" onclick="removeSpaceURL(BASE_URL);return false;" >Survey</a></p> 
<script>
   var Base_URL = "https://www.mywebsite.com/info?username";

function removeSpaceURL(url) {
    var update = url.split(' ').join('%20');
    return update;}

</script>

当我在 JSfiddle 上尝试时,我收到以下错误:

{"error": "请使用 POST 请求"}

【问题讨论】:

  • 正确的做法是首先让Base_URL 成为格式正确的 URL,如果它的用户名部分有空格,则不是。
  • 为什么要等到点击修复呢?为什么点击链接修复 URL,然后不点击链接?
  • 数据库中的用户名值可能包含一个空格(例如 John Smith)。不幸的是,我无权访问代码以限制该选项。因此,我需要提取信息并解析它,以便当我获得 url 时,它不会在每个空间都被剪切
  • 好吧,谁有权访问创建 Base_URL 的代码,这就是应该修复的地方。
  • 我完全同意,尽管我试图与他们取得联系,但我必须想出这个解决方案来绕过它

标签: javascript html url


【解决方案1】:

正确的做法是让Base_URL 首先是一个格式正确的 URL,如果它的用户名部分有空格,则不是。

但假设你坚持下去,在元素上设置属性非常简单:

<p><a id="target-link" href="">Survey</a></p> 
<script>
   var Base_URL = "https://www.mywebsite.com/info?username";
   document.getElementById("target-link").setAttribute(
        "href", encodeURI(Base_URL)
   );
</script>

注意将encodeURI 用作suggested by emiliopedrollo,而不是简单地替换空格。但话虽如此,如果 URI 的 部分 已经被正确编码并且只有用户名是问题,encodeURI 可能会双重编码。所以如果你只想替换空格:

document.getElementById("target-link").setAttribute(
    "href", Base_URL.replace(/ /g, "%20");
);

还要注意,a 元素上的onclick 中的return false 会阻止链接被关注,所以我完全放弃了onclick

【讨论】:

  • 这就像一个魅力。谢谢 !根据我从您的回答中猜到的情况,setAttribute(parameter) 使我能够将脚本的目标设置为标签内的属性?
  • @emiliopedrollo:是的,非常好的一点,尽管 URI 格式错误(部分编码正确,部分编码不正确)可能会引入其他问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多