2010-07-22 76 views
1

嘗試將某些座標以及用戶在表單中指定的某些內容推送到名爲「seatsArray」的數組。這裏是我的代碼:JS不推向陣列

<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」是正確的。正如你所看到的,我讓一個隱藏的表單對象成爲一個陣列對象,這樣ASP.NET就可以調用。

在錯誤的順序或東西在JavaScript中的東西?因爲我無法填充該文本文件。

謝謝!

+0

對於初學者來說,你爲什麼不調試在瀏覽器JavaScript代碼,使用調試器? – 2010-07-22 15:14:27

+0

爲什麼有兩次「if(e && e.pageX && e.pageX)」e.pageX? – 2010-07-22 15:16:49

+0

當你點擊單個字符串時,你想在陣列上結束什麼? – 2010-07-22 15:16:59

回答

0

嘗試在JavaScript之前和之後刪除幾個alert(seatsArray)語句,在您認爲它應該更改值之前和之後提交表單。如果你看到了正確的值,那麼你知道這是不正確的後端。

進一步檢查:prepare()函數正在查找ID =「seatsArray」的元素,該元素不存在。您有兩個元素,名稱=「seatsArray」,但沒有id =「seatsArray」。該數組很有可能被填充,但不會寫回到表單中。

+0

在我有機會點擊我的「圖像」元素並將某些東西推送到數組之前,警報出現了嗎?感謝 – IceDragon 2010-07-22 15:53:42

0

在瀏覽器中,檢查javascript錯誤。 Firefox/IE報告2. 你有一個分號,不應該在那裏。 =>函數prepare();

document.getElementById(「image」);返回null,所以coordinates.onclick失敗

我建議調試在Firefox使用Firebug,或使用開發工具與IE8(按F12)

編輯: 確保申報seatsArray作爲使用前一個數組。

....

<腳本類型= 「文本/ JavaScript的」>

seatsArray = []; //插入此行

功能準備(){

....

+0

這不是完整的代碼,「圖像」是在別處,所以它會返回該錯誤。謝謝,我刪除了分號 – IceDragon 2010-07-22 15:43:37