JS не толкает в массив

1

Попытка подтолкнуть некоторые координаты, а также некоторые вещи, указанные в форме пользователем, к массиву под названием "seatArray". Здесь мой код:

<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>

Имя текстового файла правильное в соответствии с тем, что пользователь поставил в форме "имя_файла". Как вы можете видеть, я сделал seatArray скрытым объектом формы, так что ASP.NET пытается вызвать.

Что-то в javascript в неправильном порядке или что-то в этом роде? Потому что я просто не могу заставить его заполнить этот текстовый файл.

Спасибо!

  • 0
    Для начала, почему вы не отлаживаете свой код Javascript в браузере с помощью отладчика?
  • 0
    почему "if (e && e.pageX && e.pageX)" e.pageX дважды?
Показать ещё 5 комментариев
Теги:
arrays
push
streamwriter

2 ответа

0

В браузере проверьте наличие ошибок JavaScript. Отчеты Firefox/IE 2. у вас есть точка с запятой, которой не должно быть. = > function prepare();

document.getElementById( "изображение" ); возвращает null, поэтому cоответствия c координатами.

Я рекомендую отлаживать Firefox с помощью firebug или использовать инструменты разработчика с ie8 (нажмите F12)

Изменить: не забудьте объявить seatArray как массив перед использованием.

....

< script type = "text/javascript" >

seatArray = [];//вставьте эту строку

функция prepare() {

....

  • 0
    это был не полный код, «изображение» где-то в другом месте, поэтому оно вернуло бы эту ошибку. спасибо, я удалил точку с запятой
0

Попробуйте отбросить несколько операторов alert(seatsArray) в javascript до и после того, как вы подумаете, что он должен изменить значения и один перед отправкой формы. Если вы видите правильное значение, то вы знаете, что это неправильный сервер.

При дальнейшей проверке: функция prepare() ищет элемент с id = "seatArray" , которого не существует. У вас есть два элемента с name= "seatArray" , но нет id = "seatArray" . Массив, скорее всего, заполняется, но он не записывается обратно в форму.

  • 0
    появляется предупреждение, прежде чем я получаю возможность щелкнуть по моему элементу изображения и что-то вставить в массив? Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню