javascript - 我如何将此信息发送到不同页面上的另一个文本区域?

标签 javascript html forms

就像这个 javascript 如何获取信息并将其吐入文本区域一样。我需要在不同的网页上执行此操作。我需要将信息发送到带有简单文本区域的网页(Orderpage.html)。这就是我所做的,以便将信息提交到同一页面上的文本区域。我希望这样当用户单击“完成订单”时,他们就会被带到包含该信息的网页。

function addShirt()
{ 
    {
    document.getElementById("order").value += "You ordered " + document.getElementById("shirtQuantity").value;
    }

    {
    document.getElementById("order").value += " " + document.getElementById("shirtColor").value;
    }

    if (document.getElementById("smallSize").checked)
    {
    document.getElementById("order").value += ", small shirt(s)";
    }

    if (document.getElementById("mediumSize").checked)
    {
    document.getElementById("order").value += ", medium shirt(s)";
    }

    else if (document.getElementById("largeSize").checked)
    {
    document.getElementById("order").value += ", large shirt(s)";
    }

    if (document.getElementById("giftWrap").checked)
    {
    document.getElementById("order").value += " to be gift wrapped and delivered." + "\n";
    }

    else
    {
    document.getElementById("order").value += " to be delivered." + "\n";
    }
}
<html>
<head>
<title>Shirts</title>
<script type="text/javascript" language="javascript" src="javascript.js">
</script>
</head>

<body>
<form id="shirtInfo">
<select id="shirtColor">
<option value="White">White</option>
<option value="Black">Black</option>
<option value="Grey">Grey</option>
</select>
<br />
<input type="text" id="shirtQuantity" value=""><br />
<input type="radio" name="size" id="smallSize" value="small" checked="checked">Small<br />
<input type="radio" name="size" id="mediumSize" value="medium" checked="checked">Medium<br />
<input type="radio" name="size" id="largeSize" value="large" checked="checked">Large<br />
<input type="checkbox" id="giftWrap" value="">Giftwrap?<br />
<textarea id="order" rows="15" cols="50">
</textarea><br />
<input type="button" name="send" value="Add to Cart"    onClick="addShirt()"><br />
<input type="button" name="complete" value="Complete Order" onClick=""> <br>
<a href="pants.html">Pants</a><br />
<a href="hats.html">Hats</a><br />
<a href="orderpage.html">Order Page</a>
</body>
</html>

最佳答案

在本例中,您将在 document.getElementById("order") 控件中构建一个字符串,但由于您要转到另一个页面,因此没有必要这样做。只需将其构建在变量中即可。我们称之为“数据”。

var data;
data += "You ordered " + document.getElementById("shirtQuantity").value;

等等。但是,我会将将所有这些值转换为友好文本的代码放在目标页面上。现在,我们只需要存储我们想要在页面之间发送的数据:

var data;
data.quantity = document.getElementById("shirtQuantity").value;

等等。请注意,您不必提前定义属性 - js 将接受点符号并在数据对象中创建新属性。如果您的信息本质上更加表格化,您还可以将数据对象构建为数组。这对于我们的目的来说并不重要。

将数据包装在一个漂亮、整洁的包中后,您需要对该对象进行字符串化,以便将其传递到目标页面。为此,您可以通过 JSON.stringify(data) 运行该数据对象。在目标页面上,您可以使用 JSON.parse(data) 对其进行解码。

现在,您可以将字符串化数据放入查询字符串中,但我建议使用 session 存储来在页面之间传输大型数据。这使您的 URL 看起来更整洁,并使用户无法编辑查询字符串中的数据。在“源”页面上,您需要这样的内容:

sessionStorage.setItem("shirtData", JSON.stringify(data));

这会将“数据”对象(无论它是什么)作为字符串存储在 session 存储中,名称为“shirtData”。 “目标”页面将需要以下代码:

var shirt = JSON.parse(sessionStorage.getItem("shirtData"));

这会检索相同的字符串数据,然后将其转换回对象。我相信,根据您的示例,这些将​​进入源页面的提交事件(或用户用来指示完成的任何按钮的 onclick )和目标上的 DOM Ready 事件,分别。

现在,这里有一个细节需要注意。由于您已经对要存储内容的项目的名称进行了硬编码,因此第二次运行将覆盖您在第一次运行时保存的数据。当我构建报表查看器时,我确实遇到了这个问题 - 用户可以输入报表设置并打开报表(称为 Destination1),然后更改设置并打开 Destination2。如果他们随后重新加载 Destination1,它将使用最后保存的设置 - 属于 Destination2 的设置。您可以通过生成随机 ID(例如 GUID)并将其附加到 session 存储名称,然后将查询字符串中的 ID 传递到目标页面来克服此问题。

另请注意,只要浏览器关闭, session 存储就会消失。如果您需要存储比这更长的内容,则需要将其放入 cookie 中。另请注意, session 存储并不安全,不应用于存储任何敏感内容。

关于javascript - 我如何将此信息发送到不同页面上的另一个文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603709/

相关文章:

javascript - AngularJS ng 类不起作用

javascript - angularJS json获取资源?

CSS 位置绝对/相对更改外部 div 对齐方式

forms - Symfony2 - 在 twig 中自定义 form_start 函数

javascript - 使用 javascript 隐藏 IFRAME 滚动条

javascript - jquery中如何显示图片

php - 如何显示同一个id的多条记录?

html - 什么时候可以在没有最终版本的情况下编写新页面的代码?

css - iPhone 版 Safari 上的表单宽度增加

css - 在 Bootstrap 布局中包装 ASP 表单