JavaScript не пашет в IE

MishinOleg

Guest
JavaScript не пашет в IE

Есть предельно простая функция

PHP:
for(var i=0;i<self.document.forms["flow"].elements["num_of_fields"].value+4;i++)
  {
  self.document.forms["flow"].elements[i].checked=self.document.forms["flow"].elements['order_check'].checked;
  }
return false;
Она прекрасно работает на Mozilla (Firefox), но отказывается работать в IE6.0 и как-то странно работает в IE5.5.

Я пока еще слаб в COM применительно к JavaScript, но имхо функция банальная и простая - просто ставит галки во все нужные поля checkbox

Подскажите что не так?
 

MishinOleg

Guest
хе-хе, все может быть, но с точки зрения других языков программирования функция выглядит вполне правильно. Проверю...

-~{}~ 28.04.05 15:14:

пишет что ...elements has no properties, а почему так? Как мне его заюзать as checkbox с свойством checked?

-~{}~ 28.04.05 15:23:

можешь даже ссылкой кинуться - е обижусь, даже буду благодарен.

Можно делать через переменную, то есть снача считать состояние шалона в переменную, а потом присваивать его каждому checkbox, так написано в моей книге, но разве это не то же самое, что написал я?
 

slach

Новичок
self.document.forms["flow"].elements
совершенно не обязан быть чекбоксом

проверяй его сначала на self.document.forms["flow"].elements.type соответсвующий

кроме того, i у тебя вполне может выходить за границы self.document.forms["flow"].elements.length

тоже проверяй

а то что у тебя эта хрень "прекрасно работает в Mozilla"
детка, включи JavaScript Console ... посмотри какие выдаются ошибки ...
 

MishinOleg

Guest
уже вижу, детка.

i не выходит за границы, так как elements["num_of_fields"] - это и есть количество чекбоксов на форме.

а вот на счет "проверяй" - я заранее знаю, что все поля на форме чекбоксы, или я тебя не понял?

Делаю потоковое изменение данных, то есь поставить галку "для всех", и я точно знаю что все поля на форме чекбоксы, и что их ровно elements["num_of_fields"].
 

Panchous

Павел
мде...

Код:
[PHP]
<form name="form">
<input type="Checkbox">
<input type="Checkbox">
</form>

<input type="Checkbox" onClick="checkAll(this.checked)">
<script>
function checkAll(check) {
	var elements = document.forms['form'].elements;
	for(i=0; i<elements.length; i++) {
		elements[i].checked = check;
	}
}
</script>
[/PHP]
 

MishinOleg

Guest
серьезно? и все? сенкс,

разницу в логике вижу. Не понял почему так надо, но понял КАК надо.

-~{}~ 28.04.05 16:56:

Все работает прекрасно на Firefox 1.3, Netscape 8, Opera 8, но вот в ШУ опять не работает: ни в 6.0, ни в 5.5, ни в 5.0 - явно глючит, потому как после нажатия несколько раз бывает срабатывает, бывает срабатывает при нажатии на другие чекбоксы - полная чушь.

Пробовал на разных машинах/осях - одна картина: Gecko и Opera работают, IE - ни в какую.

Выручайте коли кто что знает.

-~{}~ 28.04.05 16:58:

код твой:

PHP:
function SetAllCheckboxes(check)
	{
	var elements = document.forms['flow'].elements;
	for(var i=0; i<elements.length; i++)
		{
        elements[i].checked = check;
	    }
	return false;
	}
 

Panchous

Павел
MishinOleg
сохрани мой код в файле с расширением htm и открой в ИЕ!
Неужели сложно в 5 строчках разобраться?!
 

MishinOleg

Guest
хмм, а фигли?
Ладно, тогда сори за оффтоп. Буду разбираться почему не пашет. Всем спасибо!
 

2k

Guest
простите, а вот вопрос несколько не про это, но так же праблема с платвормами...
http://phpclub.ru/talk/showthread.php?s=&postid=466719#post466719
 

MishinOleg

Guest
Короче, разбирался-разбирался. Вот что откопал.

IE действительно глючит, когда идет потоковое изменение в довольно сложных формах, когда приходится использовать 3 и более вложенных таблиц. Причем глючит оригинально:

При вызове функции она проставляет все галочки, но не отображает их на экране. Отображает только если нажать клавишей мыши (не важно какой - правой, левой, средней) на страничке на любом месте.

Пример сморти здесь: http://mishinoleg.2pic.ru/files/index.html

Это тот самый файл, с которым я мучался. Если теперь упростить систему вложенности таблиц на уровне HTML - все будет работать нормально.
 
Сверху