Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2015, 22:18   #1
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию querySelectorAll('[type="checkbox"]:checked') не работает в ИЕ

Добрый вечер!

Код HTML:
<table id="tbl-parts">
	<thead>
		<tr align="center">
			<th></th>
			<th></th>
			<th></th>
			<th></th>
			<th><input id="checkall" type="checkbox"></th>
		</tr>
	</thead>
						
	<tr class="even">
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td><input id="chbx1" class="chbx" name="chbx" type="checkbox" value="432063JA0A"></td>
	</tr>
				
	<tr class="odd">
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td><input id="chbx1" class="chbx" name="chbx" type="checkbox" value="432063JA0A"></td>
	</tr>	
	<tr><td colspan="4"></td><td><button id="lss-bnt" class="button" onclick="javascript:showPartsList(contID)" disabled="disabled">Подобрать...</button></td></tr>
</table>
Код:
function markRowsInit() {
	var rows = document.getElementsByTagName('tr');
	var checkboxes = document.querySelectorAll('input.chbx');
	var checkall = document.getElementById('checkall');
	var button = document.getElementById('lss-bnt');
	var tableID = 'tbl-parts';
	
	for ( var i = 0; i < rows.length; i++ ) {
        // to mark the row on click ...
        rows[i].onmousedown = function() {
            var unique_id;
            var checkbox;

            checkbox = this.getElementsByTagName( 'input' );
            if ( checkbox && checkbox.type == 'checkbox' ) {
				unique_id = checkbox.id;
            } 
			else if ( this.id.length > 0 ) {
                unique_id = this.id;
            } 
			else {
                return;
            }

            if ( typeof(marked_row[unique_id]) == 'undefined' || !marked_row[unique_id] ) {
                marked_row[unique_id] = true;
            } 
			else {
                marked_row[unique_id] = false;
            }

            if ( marked_row[unique_id] ) {
                this.className += ' marked';
            } 
			else {
                this.className = this.className.replace(' marked', '');
            }

            if ( checkbox && checkbox.disabled == false ) {
                checkbox.checked = marked_row[unique_id];
            }
			
		//var checkedCount = document.querySelectorAll('input.chbx:checked').length;
		var checkedCount = document.querySelectorAll('[type="checkbox"]:checked').length;
		checkall.checked = checkedCount == checkboxes.length;
		checkall.indeterminate = checkedCount > 0 && checkedCount < checkboxes.length;						
		button.disabled = checkedCount == 0;
        }
        
		// checkbox clicks
        var checkbox = rows[i].getElementsByTagName('input');
        if ( checkbox && checkbox.type == 'checkbox' ) {
            checkbox.onclick = function() {
                this.checked = ! this.checked;
		//var checkedCount = document.querySelectorAll('input.chbx:checked').length;
		var checkedCount = document.querySelectorAll('[type="checkbox"]:checked').length;
		checkall.checked = checkedCount == checkboxes.length;
		checkall.indeterminate = checkedCount > 0 && checkedCount < checkboxes.length;						
		button.disabled = checkedCount == 0;
            }
        }
   }
   
   // checkboxALL click
	if ( checkall && checkall.type == 'checkbox' ) {
		checkall.onclick = function() {
			if ( this.checked ) {
				markAllRows( tableID );
			}
			else {
				unMarkAllRows( tableID )
			}
		}
	}
}
window.onload = markRowsInit;
Суть: при нажатии на любой ряд или любой chexbox в ряду, ряд подсвечивается другим цветом, chexbox становиться выбраным, а кнопка "Подобрать" - активной.
Однако,
var checkedCount = document.querySelectorAll('input.ch bx:checked').length;
var checkedCount = document.querySelectorAll('[type="checkbox"]:checked').length;
обе строки выдают в ИЕ ошибку: Недопустимый аргумент.
Поэтому условие button.disabled = checkedCount == 0; не выполняется.
В остальных браузерах все работает.

Подскажите, пожалуйста, почему? Как исправить?

Последний раз редактировалось Maxx; 02.12.2015 в 22:53.
Maxx вне форума Ответить с цитированием
Старый 03.12.2015, 00:03   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Не работает потому, что мелкомягкие не смогли сделать этот функционал, а поэтому придётся это сделать вам самостоятельно. jQuery (или аналог), либо свой велосипед.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 03.12.2015, 11:56   #3
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Fenex, спасибо!

В очередной раз выручаете. Теперь хоть не буду мучительно искать решения.
Не хотел я через jQuery делать, но видимо придется разобраться.
Или еще как вариант, сделаю отдельно для ИЕ кнопку всегда активной (тока надо подумать как...).
Maxx вне форума Ответить с цитированием
Старый 03.12.2015, 12:40   #4
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

И все-таки велосипед...
Код:
if ( navigator.appName == 'Microsoft Internet Explorer' ) {
	var checkboxIE = document.getElementsByName('chbx');
	var checkedCountIE = 0;
	for ( var z = 0; z < checkboxIE.length; z++ ) {
		if ( checkboxIE[z].checked ) checkedCountIE = checkedCountIE + 1;
	}
	checkall.checked = checkedCountIE == checkboxIE.length;
	checkall.indeterminate = checkedCountIE > 0 && checkedCountIE < checkboxIE.length;						
	button.disabled = checkedCountIE == 0;
}
else {
	var checkedCount = document.querySelectorAll('input.chbx:checked').length;
	checkall.checked = checkedCount == checkboxes.length;
	checkall.indeterminate = checkedCount > 0 && checkedCount < checkboxes.length;						
	button.disabled = checkedCount == 0;
}
Гы... Работает!!!
Maxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значениет с <input type="text"> в тег <a href="serch.php?serch=(сюда)"> SevenXP PHP 3 22.04.2012 03:14
Type Syntax error on token "return", invalid Type betirsolt Общие вопросы по Java, Java SE, Kotlin 2 26.01.2012 15:09
МасОС не работает ,хоть и Видит,Интернет и "сломалась" "Сеть" =/ ApxuKILLER Операционные системы общие вопросы 2 05.05.2011 08:22
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08
Применить стиль ко всем инпутам, кроме "radio" и "checkbox"? barbiturat HTML и CSS 1 03.12.2008 15:33