0

我正在尝试通过锚标记和 javascript 重定向到我的 ServletController。

现在它可以在谷歌浏览器中运行,而不是在 IE 中。到目前为止,我在网上浏览了两天,发现 IE 不能很好地使用 setAttribute 与动态元素,所以我不得不切换到使用实际属性并为其分配一个值。

锚点假设创建一个动态表单并提交表单,然后向我的 Servlet 创建一个新请求,但是由于某种原因,当我在 javascript 中单击锚点时它什么也不做。但是,当我单击 chrome 中的锚点时,它会正确执行并将我重定向到下一页而没有任何问题。

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Account</title>
<meta name="description" content="eTeam Bank">
<meta name="author" content="Abraham Cabrera">
<link rel="stylesheet" type="text/css" href="css/mystyles.css">

<!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
<script type="text/javascript"> 
function anchorRedirect(username, user_id, operation) {
"use strict";
var form = document.createElement("form");
form.name="form";
form.id="form";
form.method = "post";
form.action = "ServletController";

var hiddenField1 = document.createElement("input");
hiddenField1.type = "hidden";
hiddenField1.name = "username";
hiddenField1.value = username;
form.appendChild(hiddenField1);

var hiddenField2 = document.createElement("input");
hiddenField2.type = "hidden";
hiddenField2.name = "user_id";
hiddenField2.value = user_id;
form.appendChild(hiddenField2);

var hiddenField3 = document.createElement("input");
hiddenField3.type = "hidden";
hiddenField3.name = "operation";
hiddenField3.value = operation;
form.appendChild(hiddenField3);

form.submit();
}
</script>
</head>
<body>
<header>
    <div id="title">eTeam Bank</div>
</header>

<div id="container">
    <div class="userTitle" >
        <div class="user">
            Welcome: user
        </div>
        <div class="userTime">
        Thu Jan 31 09:24:16 EST 2013
        </div>
    </div>
    <div class="accountBox" >
        <div class="accountSpace"></div>
        <div id="accountAnchor">
        <a href="javascript:anchorRedirect('user', '2', 'loadPersonalInfo');">Personal Info</a> 
        </div>
        <div id="accountAnchor"> 
        <a href="javascript: anchorRedirect('user', '2', 'loadAccountInfo')">Account Info</a> 
        </div>
        <div id="accountAnchor"> 
        <a href="javascript: anchorRedirect('user', '2', 'loadAccountSum')">Account Summary</a> 

        </div>
    </div>
</div>

<footer>
    <div id="footerContent">Abraham Cabrera &copy; 2013</div>
</footer>

附加细节:
1. 这不是针对任何类型的生产企业或公司,仅用于个人学习。
2.我确实尝试过不使用java脚本函数直接通过url路径传递变量,但这不符合我的要求,因为我需要向我的ServletController发出新请求,以便通过模型类或获取用户帐户信息它曾经是哪个操作并将其转发回视图。

4

2 回答 2

1

我注意到,如果我获取您的代码并添加一个 id='form_div1' 的 div 并在提交之前将新创建的表单附加到它,它就会从 FireFox 和 IE 开始工作。

var my_div = document.getElementById("form_div1");
my_div.appendChild(form);
form.submit();
于 2013-01-31T16:04:04.850 回答
0

我建议在 HTML 中创建表单(而不是通过 javascript),其中包含所有需要的字段。然后,您无需创建和设置元素,而是通过简单地设置隐藏字段的值并提交表单来从根本上简化您的 JS。就像是

<form name="myform" id="myform" method="post" action="ServletController">
    <input type="hidden" name="username" value="">
    <input type="hidden" name="user_id" value="">
    <input type="hidden" name="operation" value="">
</form>

使用类似的 javascript

function anchorRedirect(username, user_id, operation) {
    document.myform.username.value = username;
    document.myform.user_id.value = user_id;
    document.myform.operation.value = operation;
    document.myform.submit();
}
于 2013-01-31T15:35:59.470 回答