Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   кроссбраузерно присвоить значения (https://javascript.ru/forum/css-html/11295-krossbrauzerno-prisvoit-znacheniya.html)

MikhailGirshberg 16.08.2010 18:09

кроссбраузерно присвоить значения
 
Есть переключатель чекбоксов. Их МНОГО (десятки тыщ). Но зато других инпутов в ноде не бывает ;-?
function toggleAllChecked(checked, node_id){
  var node = document.getElementById(node_id)
  var cbx = node.getElementsByTagName("INPUT");
  for(var i = 1; i < cbx.length; i++){
    cbx[i].checked = checked;
  }
}

Из "великолепной пятёрки" почти все браузеры справляются адекватно.

IE8 и Safari тормозят не по-детски. Как с этом побороться?

exec 16.08.2010 18:14

document.querySelectorAll('#' + node_id + ' input:checkbox');

MikhailGirshberg 16.08.2010 18:24

Цитата:

Сообщение от exec (Сообщение 67575)
document.querySelectorAll('#' + node_id + ' input:checkbox');

Не работает. Так ругается FF:
Ошибка: uncaught exception: [Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)" location: "http://192.168.0.152/tracking/javascript/eventsproc.js Line: 179"]


Я что-то ступил?

exec 16.08.2010 18:27

Упс, в querySelectorAll нет ведь такого селектора.
Пробуйте так:

document.querySelectorAll('#' + node_id + ' input[type=checkbox]');


document.querySelectorAll('#' + node_id + ' input');

float 17.08.2010 00:07

Не совсем понимаю логику exec-а...
Лично я бы поработал бы над оптимизацией цикла...

рони 17.08.2010 02:57

длину массива cbx.length сохраните в отдельной переменной это должно дать выигрыш по времени
function toggleAllChecked(checked, node_id){
  var node = document.getElementById(node_id)
  var cbx = node.getElementsByTagName("INPUT");
  var length = cbx.length;
  for(var i = 0; i < length; i++){
    cbx[i].checked = checked;
  }
}

Kolyaj 17.08.2010 07:50

exec,
тормозит цикл, а не выборка, а вы просто выборку усложнить предлагаете.

MikhailGirshberg 17.08.2010 09:27

Цитата:

Сообщение от рони (Сообщение 67611)
длину массива cbx.length сохраните в отдельной переменной это должно дать выигрыш по времени

Цитата:

Сообщение от Kolyaj (Сообщение 67614)
exec,
тормозит цикл, а не выборка, а вы просто выборку усложнить предлагаете.

Cпасибо, коллеги, стало получше.
Результат, однако, не достигнут: IE8 и Safari отрабатывают раза в 3 медленнее чем FF, Opera и GC. К тому же, Safari задаёт дурацкие вопросы про медленный скрипт.

Kolyaj 17.08.2010 09:30

Цитата:

Сообщение от MikhailGirshberg
IE8 и Safari отрабатывают раза в 3 медленнее чем FF, Opera и GC. К тому же, Safari задаёт дурацкие вопросы про медленный скрипт.

Они как бы намекают, что десятки тыщ чекбоксов на странице не то, что плохо, а просто смысла не имеют.

inGray 17.08.2010 09:41

Просто интересно, для каких операций могут потребоваться "десятки тыщ" чекбоксов :blink:


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