Графические курсоры

Geol

Пациент
Графические курсоры

День добрый, проблема в следующем:
Есть таблица с множеством картинок, при клике на которые появляются/убираются дополнительные ячейки. с этим всё ясно, но заказчик попросил, чтобы курсор при наведении на управляющую картинку появлялся в виде стрелки вниз и вверх в зависимости от состояния. Реализовал это следующим образом:

<img src='../images/INFO_p1.gif' alt='Развернуть' style='cursor:url(im_pans.cur);' onClick='hide_show(<?=$month_num?>)'>
....
function hide_show(posn) {
////////// здесь основной код
///////////
if(document.images(posn).getAttribute('alt')=='Развернуть'){

document.images(posn).style.cursor="url('im_pann.cur')";
document.images(posn).setAttribute('alt','Свернуть');
}
else{
document.images(posn).style.cursor="url('im_pans.cur')";
document.images(posn).setAttribute('alt','Развернуть');
}
}

Всё работает, но только первые пару - тройку кликов (причём по любым картинкам из набора), далее курсор дефолтовый и без всяких сообщений об ошибках. В чём может быть проблема?
 

LEglantier

Guest
Знаешь, не уверен, трудно сказать наверняка, не поюзав самой странички и не видя, что там разворачивается. Но предположение такое:
Попробуй для отладки вставить в функцию alert, который будет каждый раз сообщать тебе src рисунка document.images(posn) У меня сильное подозрение, что в то, что разворачивается, ты вставляешь еще рисунки, и в итоге индекс сабжевого рисунка в массиве images может меняться. Таким образом, в один прекрасный момент это происходит и функции в качестве параметра уже передается фактически номер другого рискунка. Где-то там меняется стиль...

Если я угадал, то попробуй обращаться к этим рисункам не как к элементам массива, а, например, с помощью GetElementById
 

Geol

Пациент
Попробуй для отладки вставить в функцию alert, который будет каждый раз сообщать тебе src рисунка document.images(posn) У меня сильное подозрение, что в то, что разворачивается, ты вставляешь еще рисунки, и в итоге индекс сабжевого рисунка в массиве images может меняться.
Определённо нет, отлаживал я алертом, всё работает как часы (там ведб не только замена курсора происходит), да и количество рисунков постоянное
Если я угадал, то попробуй обращаться к этим рисункам не как к элементам массива, а, например, с помощью GetElementById
Сейчас попробую периписать с GetElementById, но всё-же непонятно почему криво работает первый вариант (если бы совсем не работал, ещё куда ни шло)
 

camel

Новичок
Странно но я думал собитие наведения мышкой на обект это onmouseenter/onmouseout, повесь смену типа курсора на это событие.
Маленький нюанс, если ты используешь setAttribute у него есть три параметра, третий либо 0/1 почитай здесь здесь в зависимости от этого параметра атрибут либо добавляеться либо перезаписываеться
Третье и последние обращайся к картинке используя srcElement, а не передавай позицию картинке на сайте в джаваскрипте(может измениться дизигн и прочее), this тоже не рекомендую использовать будут проблемы в Експлорарах 5.5
 

camel

Новичок
onmouseenter - Fires when the user moves the mouse pointer into the object.
onmouseleave - Fires when the user moves the mouse pointer outside the boundaries of the object.
onmouseout - Fires when the user moves the mouse pointer outside the boundaries of the object.
onmouseover Fires when the user moves the mouse pointer into the object.

цитировал отсюда

Разница не значительная, для картинки, а конкретно в нескольких пикселах границы =)
 

Geol

Пациент
Странно но я думал собитие наведения мышкой на обект это onmouseenter/onmouseout, повесь смену типа курсора на это событие.
Мне нужно именно событие OnClick, и оно работает,
Маленький нюанс, если ты используешь setAttribute у него есть три параметра, третий либо 0/1 почитай здесь здесь в зависимости от этого параметра атрибут либо добавляеться либо перезаписываеться
Этим способом я меняю атрибут alt и тоже без проблем,
Третье и последние обращайся к картинке используя srcElement, а не передавай позицию картинке на сайте в джаваскрипте(может измениться дизигн и прочее)
Ну вобщем это конечно правильно, но проблему не решает.
Ещё раз проблема: курсор меняется как и предполагалась, но только первые дваклика: клик - табличка развенулась, курсор изменился, ещё клик - табличка свернулась курсор вернулся ещё клик - табличка развернулась а курсор стал дефолтовым.
 

camel

Новичок
вообщем я реализовал все тоже самое, с event.srcElement, все работает как часы, скорее всего дело в том что где то подружаеться не та картинка, настоятельно рекомендую использовать обьект event (который по сути для этого и предназначен)
вообщем попробуй вот что:
function hide_show(){
if(event.srcElement.getAttribute('alt')=='Развернуть'){
// event.srcElement.style.cursor="url('im_pann.cur')";
event.srcElement.setAttribute('alt','Свернуть');
div.style.display = 'inline';
} else if (event.srcElement.getAttribute('alt')=='Свернуть'){
// event.srcElement.style.cursor="url('im_pans.cur')";
event.srcElement.setAttribute('alt','Развернуть');
div.style.display = 'none';
}
alert(event.srcElement.outerHTML);
}

судя по тому что ты говоришь место имеет множественное значение атрибута, хотя для alt такое по идее не возможно, поробуй обращаться через event.srcElement.alt, тоже можешь помочь, проверь на других эксплорерах, у них бывают серьезные различия даже в билдах
 

camel

Новичок
и еще я все таки не понял, почему не привяжешь событие смены курсура не на onClick, получаетсья что чувак распахнув страницу будет по ней шататься с другим курсором... не логично, другое дело навел на картинку тебе показался курсор для свертывания таблички и наоборот.... удобнее по мойму, а красивые вещи красиво работают
 

Geol

Пациент
ну вот периписал:

if(event.srcElement.getAttribute('alt')=='&#208;&#224;&#231;&#226;&#229;&#240;&#237;&#243;&#242;&#252;'){
event.srcElement.setAttribute('alt','&#209;&#226;&#229;&#240;&#237;&#243;&#242;&#252;');
event.srcElement.style.cursor="url('im_pann.cur')";
} else if (event.srcElement.getAttribute('alt')=='&#209;&#226;&#229;&#240;&#237;&#243;&#242;&#252;'){
event.srcElement.setAttribute('alt','&#208;&#224;&#231;&#226;&#229;&#240;&#237;&#243;&#242;&#252;');
event.srcElement.style.cursor="url('im_pans.cur')";
}

Так конечно правильней, но результат тот-же, три клика и курсор дефолтовый.
P.S. элемент определется правильно и атрибут alt меняет(так ведь и в прежнем варианте менял)
 

Geol

Пациент
и еще я все таки не понял, почему не привяжешь событие смены курсура не на onClick, получаетсья
Да тут дело не в красоте, суть такая: есть таблица - отчётик по месяцам, при клике на рисонок раскрывается раскладка по клиентам, курсор другой или прежний только на данном рисунке, что по моему логично
 

camel

Новичок
да это же стиль обекта согласен, что на этом же обьекте....
вышли мне хтмлю страницы, на мыло, может чем помогу, как говорится одна голова хорошо а полторы лучше =))))
 
Сверху