Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Богатый внутренний мир календаря или обрезка click на внутренние теги (https://javascript.ru/forum/jquery/17314-bogatyjj-vnutrennijj-mir-kalendarya-ili-obrezka-click-na-vnutrennie-tegi.html)

Orion55 14.05.2011 12:45

Богатый внутренний мир календаря или обрезка click на внутренние теги
 
Здравствуйте.
Есть страничка – большой красивый фон, а в нём календарь. Это реализовано в div со следующей структурой.
<div class="widget-container widget_calendar" id="calendar-3">
<div id="calendar_wrap">
    		<table summary="Календарь" id="wp-calendar">


Написан простой js-скрипт

$('#1-calenheader').click(function() {
		$('#1-calenheader').hide();
  		$("#calendar-3").show("slow");		
	});	
	$('#calendar-3').click(function() {
		$("#calendar-3").hide("slow");
		$('#1-calenheader').show("slow");  		
	});

#1-calenheader – это миниверсия календаря.
Т.е. когда кликаешь на календаре он исчезает (заменяется миниатюрной версией).
Надо сделать так, чтобы по таблице с календарём можно было кликать и календарь большая версия не исчезал, а если кликнуть на фон, то исчезал.
Как я понял надо отлавливать событие нажатия таблицы с календарём и дальше событие не всплывало, по пузырьковой модели событий - надо запретить всплытие события на календарь. «Обрезать» событие click на внутренние теги. Как это программно реализовать?

P.S. «Рыба» примера находится здесь http://share.seedmoney.ru/Pioner1.zip

subzey 14.05.2011 14:09

Именно, не давать событию всплыть. Используйте для этого .stopPropagation
<style type="text/css">
	.wrapper {
		float: left;
		padding: 10px;
		background: #f0f0f0;
		border: solid #cccccc 1px;
		overflow: hidden;
	}
	.inner {
		float: left; display: inline;
		width: 30px;
		height: 30px;
		margin: 10px;
		background: lightgrey;
		border: solid #cccccc 1px;
	}
</style>

<div class="wrapper">
	<div class="inner"></div>
	<div class="inner"></div>
	<div class="inner"></div>
	<div class="inner"></div>
</div>
<script src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script>
	$(".wrapper, .inner").click(function(e){
		$(this).fadeTo(0, .5).fadeTo(200, 1);
*!*
		e.stopPropagation();
*/!*
	})
</script>

Orion55 14.05.2011 17:53

Спасибо, всё работает :)

Вот полная версия программы.
$(document).ready(function() {
	$('#1-calenheader').click(function() {
		$('#1-calenheader').hide();
  		$("#calendar-3").show("slow");		
	});	
	$('#calendar-3').click(function() {
		$("#calendar-3").hide("slow");
		$('#1-calenheader').show("slow");  		
	});
	$('#wp-calendar').click(function(e){
		e.stopPropagation();
	});
});


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