首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个表单来更改按钮的href url的一部分?

如何创建一个表单来更改按钮的href url的一部分?
EN

Stack Overflow用户
提问于 2019-08-17 13:36:32
回答 4查看 126关注 0票数 2

所以我想要有一个表单(像一个带有提交按钮的文本区或一些简单的东西),它可以改变另一个按钮的链接的一部分(如下所示)。

此表单只会更改href链接的'receiveAddr‘部分(将"1313mainstreetlosangeles“更改为用户提交的地址),但保持其他内容不变。

因此,仅根据用户提交的文本更改按钮中的href链接的一部分。

有什么方法可以做到这一点吗?

代码语言:javascript
复制
<a class="button" id="btn" href="https://url.com/v1/?type=buy&amp;mode=popup&amp;receiveAddr=1313mainstreetlosangelesca&amp;receiveType=USD&amp;callback=url.com" target="_blank">Buy now</a>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-17 13:59:00

合理的解决方案:

代码语言:javascript
复制
var changeForm = document.forms['changeBtn'],
    regex = /receiveAddr=(.*?)&/;

changeForm.addEventListener('submit', function(e) {
	e.preventDefault(); // Don't submit function
    
    var form = e.target,
    	btn = document.getElementById('btn'),
    	href = btn.href,
        textareaVal = encodeURIComponent(form.receiveAddr.value.trim());
      
    btn.href = href.replace(regex, 'receiveAddr=' + textareaVal + '&');
});
代码语言:javascript
复制
<form id="changeBtn">
    <textarea name="receiveAddr"></textarea><br>
    <input type="submit">
</form>


<a class="button" id="btn" href="https://url.com/v1/?type=buy&amp;mode=popup&amp;receiveAddr=1313mainstreetlosangelesca&amp;receiveType=USD&amp;callback=url.com" target="_blank">Buy now</a>

解决方案过度杀伤力:

代码语言:javascript
复制
var changeForm = document.forms['changeBtn'],
    regexFirstPart = /(.*)\?/;

changeForm.addEventListener('submit', function(e) {
	e.preventDefault(); // Don't submit function
    
    var form = e.target,
    	href = document.getElementById('btn').href,
    	firstPart = regexFirstPart.exec(href)[0],
        urlParts = processQuery(href); // ends with ?
      
    urlParts.receiveAddr = changeForm.receiveAddr.value;
    
    btn.href = firstPart + objectToUrlParams(urlParts);
});

function processQuery(url) {
    var regex = /[?&]([^=#]+)=([^&#]*)/g,
        params = {},
        match;
    while (match = regex.exec(url)) {
        params[match[1]] = match[2];
    }
    return params;
}

function objectToUrlParams(obj) {
    var str = "";
    for (var key in obj) {
        if (str != "") {
            str += "&";
        }
        str += key + "=" + encodeURIComponent(obj[key]);
    }
    return str;
}
代码语言:javascript
复制
<form id="changeBtn">
    <textarea name="receiveAddr"></textarea><br>
    <input type="submit">
</form>


<a class="button" id="btn" href="https://url.com/v1/?type=buy&amp;mode=popup&amp;receiveAddr=1313mainstreetlosangelesca&amp;receiveType=USD&amp;callback=url.com" target="_blank">Buy now</a>

票数 1
EN

Stack Overflow用户

发布于 2019-08-17 13:50:15

看看URLSearchParams

您将需要一个polyfill for IE

代码语言:javascript
复制
let url = new URL("https://url.com/v1/?type=buy&mode=popup&receiveAddr=1313mainstreetlosangelesca&receiveType=USD&callback=url.com");
let params = new URLSearchParams(url.search);

document.getElementById("btn").addEventListener("click", function(e) {
  var addr = document.getElementById("addr").value.trim();
  if (addr) {
    params.set('receiveAddr', addr);
    url.search = params.toString();
    this.href=url;
    console.log(url);
  } else {
    e.preventDefault();
    document.getElementById("addr").focus();
    alert("Please fill in an address");
  }
});
代码语言:javascript
复制
<input type="text" id="addr" />
<a class="button" id="btn" target="_blank">Buy now</a>

替代方案-请注意encodeURIComponent

代码语言:javascript
复制
document.getElementById("btn").addEventListener("click", function(e) {
  var addr = document.getElementById("addr").value.trim();
  if (addr) {
    addr = encodeURIComponent(addr);
    var url = `https://url.com/v1/?type=buy&mode=popup&receiveAddr=${addr}&receiveType=USD&callback=url.com`
    this.href=url;
    console.log(url);
  } else {
    e.preventDefault();
    document.getElementById("addr").focus();
    alert("Please fill in an address");
  }
});
代码语言:javascript
复制
<input type="text" id="addr" />
<a class="button" id="btn" target="_blank">Buy now</a>

票数 2
EN

Stack Overflow用户

发布于 2019-08-17 20:22:05

棘手的解决方案:

代码语言:javascript
复制
textarea=//your textarea
var value="";
if(textarea.value==null){
value="1313mainstreetlosangelesca";
}else{
value=textarea.value;
}

然后将链接添加到文档:

代码语言:javascript
复制
link='<a class="button" id="btn" href="https://url.com/v1/?type=buy&amp;mode=popup&amp;receiveAddr='+value+'&amp;receiveType=USD&amp;callback=url.com" target="_blank">Buy now</a>';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57533563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档