Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Появление и исчезновение элемента на странице. (https://javascript.ru/forum/jquery/49178-poyavlenie-i-ischeznovenie-ehlementa-na-stranice.html)

mastanggt 01.08.2014 01:40

Появление и исчезновение элемента на странице.
 
Добрый день.
Имеется таблица каких-то событий - Ссылка
При нажатии на кнопку "Правила" появляются правила связанные с определенным событием - Ссылка.
При нажатии на кнопку, таблица с правилами должна выезжать снизу события.
Когда нажимаешь на кнопку "Правила" другого события, уже открытые должны свернуться и исчезнуть, и только после этого должна вылезти другая таблица с правилами.
Собственно в этом и вопрос, как это сделать.
У меня не получается сделать анимацию выезжания, сделал пока-что просто опасити, но как сделать анимацию убирания уже открытых таблиц, а потом добавления нового я не знаю.

Вот мой код.
Пробовал делать по разному, не получается :(


$('button.tableGetRules').click(function () {

		var $btn = $(this);
		var id = $btn.data('id');

		$.post('tableEvents/getRules/', {
				event_id: id
			},
			function (data) {
				if (data['errors']) {
					alert(data['errors']['event_id']);
					return;
				}

				$(".rulesForEvents").hide("slow", function () {
					$('.rulesForEvents').remove();
				});
				$('.colored').css({'background-color': ''});
				$btn.parent().parent().addClass('colored').css({'background-color': '#FFFACD'});
				$btn.parent().parent().after(
					"<tr class='rulesForEvents' style='opacity: 0;'><td colspan='4' style='background-color: #FFFACD; '><div class='test' style='margin-left: 35px;  '>" + data + "</div></td></tr>"
				);

				$(".rulesForEvents").animate({'opacity': '1'}, 1000);




			}
		);

	});

Rise 01.08.2014 15:14

mastanggt, попробуй так:
<style>
tr.active{background:#FFFACD}
div.rulesForEvents{display:none;margin-left:35px;}
</style>

<script>
$('button.tableGetRules').click({x:0},function(e){
	if (e.data.x != this) {
		if (e.data.x) {
			$(e.data.x)
				.closest('tr')
				.removeClass('active')
				.next()
				.find('.rulesForEvents')
				.slideUp(500,function(){
					$(this).closest('tr').remove();
				});
		}
		var $btn = $(this);
		var $act = $btn.closest('tr').addClass('active');
		$.post(
			'tableEvents/getRules/',
			{ event_id: $btn.data('id') },
			function(data){
				if (data['errors']) {
					alert(data['errors']['event_id']);
					return;
				}
				$act.after('<tr class="active"><td colspan="4"><div class="rulesForEvents">'+data+'</div></td></tr>')
					.next()
					.find('.rulesForEvents')
					.slideDown(500);
			});
		e.data.x = this;
	}
});
</script>

mastanggt 01.08.2014 16:28

Круто, работает, только не понятно откуда берется e, ведь мы при клике ничего не передаем в функцию.
И не работает background-color на tr почемуто

Rise 01.08.2014 17:29

Цитата:

Сообщение от mastanggt (Сообщение 323809)
только не понятно откуда берется e, ведь мы при клике ничего не передаем в функцию.

почитай про события в js
Цитата:

Сообщение от mastanggt (Сообщение 323809)
И не работает background-color на tr почемуто

хз в моем примере всё работает


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