Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用查询字符串更改表单值_Javascript_Url Encoding - Fatal编程技术网

Javascript 使用查询字符串更改表单值

Javascript 使用查询字符串更改表单值,javascript,url-encoding,Javascript,Url Encoding,我有一个销售漏斗,我通过谷歌API询问地址,它返回类似以下的查询字符串: 123+Yonge+Street%2C+Toronto%2C+ON%2C+Canada 我发现了一个函数,用于获取查询字符串,如下所示: function getParameterByName(name, url) { if (!url) { url = window.location.href; } name = name.replace(/[\[\]]/g, "\\$&"); var regex = n

我有一个销售漏斗,我通过谷歌API询问地址,它返回类似以下的查询字符串:

 123+Yonge+Street%2C+Toronto%2C+ON%2C+Canada
我发现了一个函数,用于获取查询字符串,如下所示:

function getParameterByName(name, url) {
if (!url) {
  url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
    results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
然后,我在页面的Div中以ID address_name的方式正确地显示查询字符串(没有特殊字符),但是当我尝试使用相同的变量将相同的地址添加到输入字段中时,会导致输入文本为123+Yonge+Street+Toronto+on+Canada

var address = getParameterByName('address');
document.getElementById("address_name").innerHTML=address;
document.getElementById("formaddress").value = address;

当我尝试将其放入输入字段时,它可以完美地插入DIV,而空格则被替换为“+”。使用输入表单而不是Div是否缺少某种特殊格式或规则?

您的代码与此工作示例有何不同

函数getParameterByName(名称、url){ 如果(!url){ url=window.location.href; } name=name.replace(/[\[\]]/g,\\$&); var regex=new RegExp(“[?&]”+name+”(=([^&#]*)和|#|$), 结果=regex.exec(url); 如果(!results)返回null; 如果(!results[2])返回“”; 返回组件(结果[2]。替换(/\+/g,”); } var address=getParameterByName('address','?address=123+Yonge+Street%2C+Toronto%2C+ON%2C+Canada'); document.getElementById(“地址\名称”).innerHTML=地址; document.getElementById(“formaddress”).value=地址


代码是正确的,输入字段被隐藏而不是文本字段有问题。

你能把代码贴在你给输入字段赋值的地方吗?@Psi它已经在那里了。我想我是瞎了……ID
formaddress
的元素是什么类型的?如果它是一个
,那么它的
类型是什么?可以将.replace放在对decodeURIComponent的调用之外:
返回decodeURIComponent(结果[2])。replace(/\+/g,”)虽然这会是一个很好的注释(使用一个JSFIDLE示例),但它并没有真正回答这个问题。我认为如果OP提供更多信息,我可以调整答案,使其更有帮助。您可能是对的,这更适合于注释,但我更喜欢在JSFiddles.Id上使用sosnippets,它的外观没有什么不同,页面中肯定还有其他内容。它是通过点击漏斗使用的,表单是通过activecampaign集成的,猜测可能会发生一些与代码无关的事情。如果有人想查看,页面是sell.2percentraltyedge.ca。除非手动设置,否则我尝试更改的输入似乎从未分配值。作为最后手段,您始终可以执行
input.value=address.replace(/\+/g',)
。这永远不会在输入值中产生加号,不管您的
地址沿途发生了什么。这是一个解决办法,但至少应该能起作用。它到处都能起作用,将原始输入类型从“隐藏”更改为“文本”时出现了一个问题,不知道为什么,但它能起作用。