Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает display: block под IE (https://javascript.ru/forum/misc/20990-ne-rabotaet-display-block-pod-ie.html)

inferno3 25.08.2011 02:57

Не работает display: block под IE
 
Собственно вот код:
Код:

<style>
.sdan{
        display:none;
}
</style>

<form action="index.php" name="sort" method="post">
<script language="javascript">

if(document.getElementsByClassName == undefined) { 
   document.getElementsByClassName = function(cl) { 
      var retnode = []; 
      var myclass = new RegExp('\\b'+cl+'\\b'); 
      var elem = this.getElementsByTagName('*'); 
      for (var i = 0; i < elem.length; i++) { 
         var classes = elem[i].className; 
         if (myclass.test(classes)) { 
            retnode.push(elem[i]); 
         } 
      } 
      return retnode; 
   } 
}; 
//фиксим ClassName под IE

var IE='\v'=='v'; //проверяю IE ли это
if(IE) {//если да
	function r() {//не отрабатывает дисплей блок в ие
	    var elements = document.getElementsByClassName('sdan');
	    if(document.getElementById('cb').checked){
			for (i = 0; i < elements.length; i++) {
	        elements[i].style.display = 'block';
	    }}else{for (i = 0; i < elements.length; i++) {
	        elements[i].style.display = 'none';
	    }}
	}
}else{


function r() {
	    var elements = document.getElementsByClassName('sdan');
	    if(document.getElementById('cb').checked){
			for (i = 0; i < elements.length; i++) {
	        elements[i].style.display = 'table-row';
	    }}else{for (i = 0; i < elements.length; i++) {
	        elements[i].style.display = 'none';
	    }}
	}
}
function red() {//этот код работает нормально!!!!
	    var elements = document.getElementsByClassName('postdate');
	    if(document.getElementById('cb1').checked){
			for (i = 0; i < elements.length; i++) {
	        elements[i].style.backgroundColor = '#F16969';
	    }}else{for (i = 0; i < elements.length; i++) {
	        elements[i].style.backgroundColor = '';
	    }}
	}	
	</script>

<input type="checkbox" id="cb" onclick="r()" > Показать все заказы <br>
<input type="checkbox" id="cb1" onclick="red()" > Подсветить просроченные <br>
</form>

Ну что table-row под IE работать не станет это понятно,
но чтобы block ... :-E

По умолчанию класс "sdan" - display: none;
Если изменить "sdan" на display: block то скрипт со второго клика по чекбоксу начинает работать, правда криво как-то. С помощью этого скрипта нужно показать скрытые строки в таблице.
Собственно сабж.

RUVATA 25.08.2011 08:33

Так они не отрисовываются, или действительно не изменяют состояние ?
дебаг проводил ?

nikita.mmf 25.08.2011 13:23

С каких пор IE поддерживает getElementsByClassNamе?

inferno3 25.08.2011 22:51

Цитата:

Сообщение от nikita.mmf (Сообщение 122360)
С каких пор IE поддерживает getElementsByClassNamе?

С тех самых как функцию на javaskript написали которая создает этот метод

inferno3 25.08.2011 22:54

Цитата:

Сообщение от RUVATA (Сообщение 122297)
Так они не отрисовываются, или действительно не изменяют состояние ?
дебаг проводил ?

первый чекбокс не работает, не меняет дисплэй в ИЕ
Дебаг по данному скрипту ничего не дал
Второй чекбокс отрабатывает и подкрашивет как надо.(просто для примера привел)

melky 26.08.2011 00:07

всё работает, только надо бы знать перед написанием скрипта, что select.style.display === "inline", а не "block"

и еще : он ругается, когда имя переменной совпадает с id элемента.

<select id="a" style="display:none"><option>a</option></select>
<script>
b = document.getElementById('a');
b.style.display = "inline";
</script>


т.е. если бы я выбрал 'a', а не 'b', то он бы начал плеваться.

inferno3 26.08.2011 21:40

Может кто ни будь предложет более изящный метод скрытия нескольких строк таблицы по клику на чекбокс?
Я заменил класс на id в виде 1,2,3,4....29, id в ИЕ должен отрабатываться нормально.
теперь все эти строки нужно скрыть по чекбокчу, подскажите как лучше их перебрать?
что не так я написал?
function r() {
	if(document.getElementById('cb').checked){
	for (i=0; i<29;i++){
		var y=0;
		getElementsByid(y).style.display = 'table-row';
		y++;
	}
}else{
	for (i=0; i<29;i++){
		var y=0;
		getElementsByid(y).style.display = '';
		y++;
	}
}

popov654 27.08.2011 04:27

Опечатка в пятой строчке)
А так вроде всё хорошо...

devote 27.08.2011 04:53

for (i=0; i<29;i++){
*!*
	var *!* y=0; */!*
	*!*document.getElementById*/!*( *!* y */!* ).style.display = 'table-row';
*/!*
	y++;
}
Посмотрите сами на свою ошибку

popov654 27.08.2011 14:40

Хи) Чёрт, я тоже проглядел) Естественно :)
А зачем товарищу y, пусть i юзает напрямую)


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