Switch че-то глюкует..

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

Ответить
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

Накорябал такую ф-цию для обработки MouseOver/MouseOut/MouseClick для <TR>
function bool2int(b) {
if (b) { return 1; } else { return 0; }
}
function bitmask(a, b, c) {
return Number(a*4) + Number(b*2) + Number(c);
}
function sel_clr() {
var rows = document.all('row');
for(i=0; i < rows.length;i++) {
rows(i).sel = 0;
}
}
function mouse_click(obj) {
sel_clr();
obj.sel = 1;
}
function mouse_hover(obj, over) {
b = bitmask(bool2int(over), bool2int(obj.all('chk[]').checked), obj.sel);
switch (b) {
case 0:
obj.className = 'normal';
break;
case 1,3:
obj.className = 'selected';
break;
case 2,4:
obj.className = 'checked';
break;
case 5,6,7:
obj.className = 'inverted';
break;
}
window.status = b+' '+obj.className;
return obj.className;
}
<style>
.selected {
background-color:yellow;
color:#0000ff;
}
.checked {
background-color:#d8bfd8;
color:#0000ff;
}
.normal {
background-color:#e6e6fa;
color:#0000ff;
}
.inverted {
background-color:#0000ff;
color:#e6e6fa;
}
</style>
Строки такого вида:
<tr name = "row" id = "row" num=0 sel = 0 style = "cursor: hand;"
onmouseover = "mouse_hover(this, true);"
onmouseout = "mouse_hover(this, false);"
onclick = "mouse_click(this)">
<td>ТЕСТ1</td>
<td><input name=chk[] id=chk[] type=checkbox value=0></td>
<td>Тест2</td>
<td>Тест3</td>
<td>Тест4</td>
</tr>
См. статус окна. Чесно говоря, не знаю что и думать.
Поможыте, чем можыте..
Буду брагодарен за любую помощь.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

ILay,

в Интернет Експлорере ещё более ни мение работает, хоть и не понятно, что оно делать должно.

а ФаерФокс тихонько, но настойчиво ругается неприличными словами,
говорит, что ф-ции "obj.all" знать не знает, ведать не ведает :-)

В Фаерфоксе есть очень удобная вещица, Консоль JavaScript называется, советую использовать.


Напиши словами, чего ты от него хочешь...


P.S. Форматированный код лучше вставлять при помощи Тэга CODE
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

Функция должна в зависимости от состояния чекбокса в строке,
свойства sel и события Mouse_over/Mouse_out окрашивать строку в разный цвет.
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

Пишу под ИЕ онли. Под Интранет.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

ILay, ну у меня в разный цвет оно в ИЕ и окрашивает ))

А в чём проблема?
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

Не тот цвет. +(
Я спецом в статус вывел код состояния от трех переменных и значение класса стиля.
Свич их миксует в одном ему поянтном сочетании. +(
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

ILay, а, ну да, теперь понял :-)

Код: Выделить всё

<script>
function testSwitch(b) {

switch (b) {

	case 0:
		document.write('0 - ' + b + '
');
	break;

	case 1,3:
		document.write('1, 3 - ' + b + '
');
	break;

	case 2,4:
		document.write('2, 4 - ' + b + '
');
	break;

	case 5,6,7:
		document.write('5, 6, 7 - ' + b + '
');
	break;
}
 
}

for(var i = 0; i < 9; i ++) {
	testSwitch(i);
}
</script>
Выведет тебе ни что иное, как:
0 - 0
1, 3 - 3
2, 4 - 4
5, 6, 7 - 7


Берётся только последний элемент.

Правильный код:

Код: Выделить всё

<script>
function testSwitch(b) {

switch (b) {

	case 0:
		document.write('0 - ' + b + '
');
	break;

	case 1:
	case 3:
		document.write('1, 3 - ' + b + '
');
	break;

	case 2:
	case 4:
		document.write('2, 4 - ' + b + '
');
	break;

	case 5:
	case 6:
	case 7:
		document.write('5, 6, 7 - ' + b + '
');
	break;
}
 
}

for(var i = 0; i < 9; i ++) {
	testSwitch(i);
}
</script>
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

ЕЕЕЕ!!! СЕнкз э лот!
саМ БЫ НИ В ЖЫСТЬ НЕ ДОПЕР!
ILay
Сообщения: 34
Зарегистрирован: 06 мар 2006, 13:42

А в МСДНе этого нет.
Стоит ли им вообще пользоваться применительно к JScript+ХТМЛ?
Стоит ли использовать макрософтовые приблуды(бихэвиорс и проч)?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

ILay,
пишу, как ты мог догадаться, ориентируясь на ФаерФокс (стараясь и ИЕ не обижать).
А потому вопросы относительно МСДНа - не совсем ко мне.
Ихняя страница в ФФ даже не работает .. в некоторых местах.

Но, на счёт того, что там этого нет. Ок, нет.
Но там ведь и не сказано, что можно использовать предложенный тобою синтаксис!
label - это метка, на которую прыгает программа и обрабатывает кусок кода, пока не выйдет из блока swith сама, или пока её не выкинут по break;
Об этом там написано.

Стоит ли использовать?
Я стараюсь использовать всё, что можна, не нарушая при этом (относительной) кроссбраузерности кода.

Взять хотя бы эти ИЕ-шные тэги ..
Ответить