Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Передача формы в IE (https://javascript.ru/forum/css-html-internet-explorer/17999-peredacha-formy-v-ie.html)

Rojas 12.06.2011 14:41

Передача формы в IE
 
Добрый день!
Столкнулся со следующей проблемой..

AJAX (хоть это и не важно).

Есть форма <form name="search" method="post"> с кучей полей, форма прекрасно работает, подгружая данные при изменении параметров по событию onchange..
Например,
<select id="region" size="1" name="region" onchange="check_form(this.form,a,b,c,d,e);">
<option value="0">Любой регион</option>
<option value="1">блабла</option>

То есть при изменении в скрипт отправляются данные формы и еще некоторые параметры.
Форма в этом случае передается в виде массива и в JS отлично обрабатывается. Как в ФФ, так и в ИЕ.

Код:

function check_form(category,form,type,dir,field)  {
  var check = new Array();
  var query = new Array();

  for(i=0;i<(form.length); i++) {

        if (form.elements[i].type == "checkbox") {
                  if (form.elements[i].checked)
                  {
                          check.push(form.elements[i].name)        ;
                  }

        }
........
........
}

Вне формы есть несколько ссылок, которые при клике должны передавать в скрипт данные той же самый формы + свои какие-то параметры:
<a style="cursor:pointer;font-size:13px;" onclick="check_form(forms[\'search\'],e,f,g,h,i');">Клик!</a>


А здесь происходит ошибка:
В ФФ все работает прекрасно, a в ИЕ выдает:
"Ошибка: 'elements' - есть null или не является объектом"
Проверил отладчиком, и выяснилось, что в данном случае (в случае со ссылками) в ФФ форма, как ей и положено, передается в виде: [object HTMLFormElement], а в ИЕ в виде: [object HTMLCollection] и, соответственно, не парсится..

Как быть?
Есть какое-то решение, чтобы в ИЕ тоже передавался [object HTMLFormElement] или делать проверку в JS и если ИЕ - разбирать приходящий [object HTMLCollection] ?
Вот ссылка, если любопытно: http://autobb.spb.ru/index.php?option=com_ajaxauto

Rojas 13.06.2011 15:32

В общем, сам спросил, сам отвечаю..
Оказывается, глупо передавать в событии массив элементов формы для функции JS, когда можно получить этот самый массив по document.getElementById("form id")
:)
Теперь все работает..

melky 13.06.2011 15:58

Цитата:

Сообщение от Rojas (Сообщение 108459)
можно получить этот самый массив по document.getElementById("form id")

это как???

она один элемент возвращает. максимум

поделись магией)

Rojas 13.06.2011 16:21

а вот и нет - возвращает вовсе даже массив, как оказалось
В html в форме прописал id
<form id="formsearch"  method="post">

Из всех селектов и ссылок, где есть событие ончейндж или онклик, убрал this.form и form[search], например:
<select id="region" size="1" name="region" onchange="check_form();">

и
<a style="cursor:pointer;font-size:13px;" onclick="check_form();">Клик!</a>

в JS элементы формы получаю, разбирая полученный по getElementById массив:

Код:

var form = document.getElementById("formsearch"); // получаю массив элементов формы "formsearch"
  for(i=0;i<(form.length); i++) {
  var name = form.elements[i].name ; // получаю имя по имени
  var value =  form.elements[i].value; // получаю значение по value
  ...........
// всячески их обрабатываю
........
}

profit :)

melky 13.06.2011 16:30

он не массив возвращает,а форму :)

<form id="c">
<input><input><input><input><input>
</form>

<script>
alert( document.getElementById('c') ) // [object HTMLFormElement]
</script>


хотя.. какая разница)

Rojas 13.06.2011 16:37

Дадад, еще правильней - объект ))


Часовой пояс GMT +3, время: 04:13.