尝试将一些坐标以及用户在表单中指定的一些内容推送到名为“seatsArray”的数组中。这是我的代码:
<div>
<img onLoad="shiftzoom.add(this,{showcoords:true,relativecoords:true,zoom:100});" id="image" src="plan1.bmp" width="1024" height="768">
</div>
<script type="text/javascript">
var seatsArray = [];
</script>
<br><input id="backnave" type="radio" name="area" value="backnave" /> Back Nave<br>
<input id="frontnave" type="radio" name="area" value="frontnave" /> Front nave<br>
<input id="middlenave" type="radio" name="area" value="middlenave" /> Middle nave<br>
<input type="radio" id="standardseat" name="seat" /><label for="radio1">Standard</label><br>
<input type="radio" id="wheelchairseat" name="seat" checked="checked" /><label for="radio2">Wheelchair</label><br>
<form id="my_form" action="savetext.aspx" method="post" onsubmit="return prepare()">
<input type="text" id="file_name" name="file_name" rows="1" cols="20" />
<input type="hidden" name="seatsArray" />
<input type="submit" value="Save" />
</form>
<form id="my_form" action="savetext.aspx" method="post" onsubmit="return prepare()">
<input type="text" id="file_name" name="file_name" rows="1" cols="20" />
<input type="hidden" name="seatsArray" />
<input type="submit" value="Save" />
</form>
<script type="text/javascript">
function prepare();
{
document.getElementById('seatsArray').value = seatsArray.join();
return true;
}
</script>
<script type="text/javascript">
var coordinates = document.getElementById("image");
coordinates.onclick = function(e) {
e = e || window.event;
if (e && e.pageX && e.pageX) {
e.posX = e.pageX;
e.posY = e.pageY;
} else if (e && e.clientX && e.clientY) {
var scr = {x:0,y:0},
object = e.srcElement || e.target;
//legendary get scrolled
for (;object.parentNode;object = object.parentNode) {
scr['x'] += object.scrollLeft;
scr['y'] += object.scrollTop;
}
e.posX = e.clientX + scr.x;
e.posY = e.clientY + scr.y;
}
var desc = "";
if(document.getElementByID("backnave").checked) {
desc = "BN, "+desc;
} else if(document.getElementByID("middlenave").checked) {
desc = "MN, "+desc;
} else if(document.getElementByID("frontnave").checked) {
desc = "FN, "+desc;
}
if(document.getElementById('wheelchairseat').checked) {
//Wheelchair seat is checked
desc = "Wheelchair "+desc;
}
seatsArray.push(desc + e.posX, e.posY);
}
</script>
但是没有任何东西被推到阵列。我可以告诉这个,因为我使用以下ASP.NET将数组写入文本文件:
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string path = Server.MapPath(".")+"/"+Request.Form["file_name"] + ".txt";
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine(Request.Form["seatsArray"]);
sw.WriteLine("");
}
}
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Response.Write(s);
}
}
}
</script>
根据用户在“file_name”格式中输入的内容,文本文件的名称是正确的。正如你所看到的,我使seatArray成为一个隐藏的表单对象,这就是ASP.NET试图调用的内容。
javascript中的内容是错误的顺序还是什么?因为我无法让它填满那个文本文件。
谢谢!
答案 0 :(得分:0)
在您认为应该更改值之前和之后,尝试在javascript中删除一些alert(seatsArray)
语句,并在提交表单之前。如果您看到正确的值,那么您就知道它是不正确的后端。
进一步检查:prepare()函数正在查找id =“seatsArray”的元素,该元素不存在。你有两个名字=“seatsArray”但没有id =“seatsArray”的元素。该数组很可能被填充,但它没有被写回到表单中。
答案 1 :(得分:0)
在浏览器中,检查javascript错误。 Firefox / IE报告2。 你有一个不应该在那里的分号。 =&gt; function prepare();
的document.getElementById( “图像”);返回null,所以coordinates.onclick失败
我建议使用firebug在Firefox中进行调试,或者使用带有ie8的开发工具(按F12)
编辑: 确保在使用前将seatArray声明为数组。
...
&LT; script type =“text / javascript”&gt;
seatsArray = []; //插入此行
功能准备() {
...