Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает стиль класса элемента, полученного аяксом. (https://javascript.ru/forum/jquery/8901-ne-rabotaet-stil-klassa-ehlementa-poluchennogo-ayaksom.html)

somename 20.04.2010 00:37

Не работает стиль класса элемента, полученного аяксом.
 
Есть код:
function show(){
		$.ajax({
			type: "POST",
   			url: "main.php",
   			data: "messagebox=add",
			dataType: "html",
   			success: function (msg){$("#message-box").html(msg);}
		});
	}


из main.php приходит код:
<div class="box-controls">
					<div class="button-no">
						<div id="button-close" class="button-handler">Отмена</div>
					</div>
					<div class="button-yes">
						<div id="button-ok" class="button-handler" onmouseover="overHandler();" onmouseout="outHandler();" onmouseup="upHandler();" onmousedown="downHandler();" onclick="clickHandler();">Сохранить</div>
					</div>
					
				</div>


В css прописаны стили для button-yes:
Код:

.button-yes div.button-hover{border-color:#999 #888 #888; background-color:#999;}
.button-yes div.button-down{border-color:#777 #666 #777; background-color:#777;}

Но функциями стиль не применяется.
function outHandler(){$(this).attr("class", "");}
function upHandler(){$(this).attr("class", "button-down");}
function downHandler(){$(this).attr("class", "");}


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

subzey 20.04.2010 00:42

Используйте live()

somename 20.04.2010 00:48

Огромное Вам спасибо. Выручили. Совсем не знал о существовании этой функции

somename 20.04.2010 01:09

Изменил функции на
$('.button-handler').live('mouseover mouseout mousedown mouseup', function(event) {
		if (event.type == 'mouseover') { $(this).attr("class", "button-hover"); }
		if (event.type == 'mouseout') { $(this).attr("class", ""); }
		if (event.type == 'mousedown') { $(this).attr("class", "button-down"); }
		if (event.type == 'mouseup') { $(this).attr("class", ""); }
	});


К сожалению, обработчик отрабатывает только один раз. Подскажите, пожалуйста, как заставить выполняться всегда?

somename 20.04.2010 01:29

Я так понял, что функция live навешивает обработчик на элемент, удалить же его можно с помощью die, но в моем случае это видимо не подходит. Мне лишь нужно по наведению на кнопку курсора выделять ее как активную, а при убирании мышкт, снимать активность. Проблема в том, что кнопка приходит через ajax.

Надеюсь на помощь специалистов jquery)

micscr 20.04.2010 08:32

live - только одно событие указывать.

Что касается кода в первом сообщении просто this неверно передается.
Надо изменить по типу:
<div id="button-ok" class="button-handler"  onmouseover="overHandler(this);" ...
function overHandler(obj){$(obj).attr("class", "button-hover");}

subzey 20.04.2010 09:37

Цитата:

Сообщение от somename
отрабатывает только один раз

$(this).attr("class", "button-hover")

Вы заменяете значение класса, а Вам нужно дописывать, иначе live не сможет «распознать» нужный элемент. Используйте .addClass() и .removeClass().

somename 20.04.2010 10:01

Благодарю. Оба совета помогли, но выбрал второй из-за легкости кода.


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