gpt4 book ai didi

javascript - 当 method=get 且 URL 包含散列时,使用 Javascript 更改表单操作时 IE 中的错误

转载 作者:数据小太阳 更新时间:2023-10-29 06:08:27 25 4
gpt4 key购买 nike

我正在使用 Javascript 在您提交表单时更改表单的 URL。如果该 URL 包含哈希字符串 (#),则 Internet Explorer 将忽略它并只提交到之前的 html 部分。 Firefox 和 Chrome 没问题。

演示:

<script type="text/javascript">
function changeURL() {
var myform = document.getElementById('myform');

myform.setAttribute("action", "page2.html#hello");

return false;
}
</script>

<form id="myform" action="page1.html" method="get" onsubmit="changeURL()">
<input type="submit">
</form>

如果我将方法更改为“post”,就可以了。如果我使用“get”,IE 会访问 page2.html,但 URL 中没有 #hello

无论我使用 jquery 还是仅使用 javascript,都会发生这种情况,请尝试以下各项:

myform.action = "page2.html#hello";

myform.attr("action", "page2.html#hello");

myform.get(0).setAttribute("action", "page2.html#hello");

有什么建议(假设我必须将该方法保留为“get”,并且我必须在 URL 中使用散列,并且我必须使用 Javascript 动态更改此操作)?

最佳答案

我自己在 IE8 中进行的测试表明,它确实坚持哈​​希值 (#hello) 出现在 URL 中的查询字符串 (?foo=bar) 之后。遗憾的是,您的表单不会为您执行此操作,并且在提交表单时无法强制它这样做。

尝试将散列编码为以下形式:

<script type="text/javascript">
function changeURL() {
var hidden = document.createElement('input');
hidden.setAttribute("type", "hidden");
hidden.setAttribute("name", "hash");
hidden.setAttribute("value", "hello");
var myform = document.getElementById('myform');
myform.setAttribute("action", "page2.html");
myform.appendChild(hidden);
// return false;
}
</script>
<form id="myform" action="page1.html" method="get" onsubmit="changeURL()">
<input type="submit">
</form>

然后在 page2.html 的顶部,将其提取出来:

<script type="text/javascript">
var qs = window.location.search.substring(1);
var qsarr = qs.split("&");
for (var i=0; i<qsarr.length; i++) {
var tarr = qsarr[i].split("=");
if (tarr[0]==="hash") {
window.location.hash = tarr[1];
}
}
</script>

关于javascript - 当 method=get 且 URL 包含散列时,使用 Javascript 更改表单操作时 IE 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com