Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   JQuery и click (https://javascript.ru/forum/jquery/1296-jquery-i-click.html)

stanlee 11.06.2008 18:11

JQuery и click
 
Начал изучать эту либу
не пойму как сделать действие чтобы при кликании на ячейку таблицы менялся цвет и обратно

вернее как обратно не пойму

вот мы запускаем прцесс смены класса при нажатии
$(".table tr").click(function() {$(this).addClass("over");});

а дальше как?

EugenyK 11.06.2008 20:20

Две функции напиши отдельно по смене класса и внутри click() по очереди используй.

Гость 13.06.2008 20:07

Подобное.
 
Столкнулся с подобной проблемой. Правильно я понл?

$(".table tr").click(
function() {
$(this).addClass("over");
},
function() {
$(this).addClass("out");
});

Андрей Параничев 13.06.2008 21:32

Гость, какая именно задача у вас? Чтобы этот <tr> "мигал" при нажатии на клавишу, или чтобы при первом клике становился один цвет фона, при повторном клике - другой?

stanlee 16.06.2008 00:28

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

stanlee 23.12.2008 18:58

поднимаю эту тему снова )

столкнулся со следующей проблемой
если "строка" состоит из двух подстрок
типо
<tr>
<td rowspan=2></td>
<td></td>
</tr>
<tr>
<td></td>
</tr>

как объединять такой блок чтобы при наведении мышкой у двух строк сразу менялся цвет?

Gvozd 23.12.2008 23:29

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

а объеденить именно никак нельзя.
только навешивание двух обработчиков с указанием каких именно строк надо стиль менять

stanlee 24.12.2008 11:45

у меня только идея ввести класс для 2х строк
типо

<tr class='tr1'>
<td rowspan=2></td>
<td></td>
</tr>
<tr class='tr1'>
<td></td>
</tr>

но ума не приложу как написать код для проверки события иза малого знания js

не подскажете?

Gvozd 24.12.2008 12:51

$('.tr1').click(
function() {
$('.tr1').меняем_стиль();
});

по моему как-то так.
и к тому же в данном случае не знания js а знания jQuery вас подводят.
да и меня тоже.
посмотрите маны по jQuery

Kolyaj 24.12.2008 13:59

И этот человек тычет каждому второму про bb-теги.

Gvozd 24.12.2008 18:17

Да.я
и я приношу извинения
Кстати кажется тот код, что янаписал правильно должен писатся как-то так
$('.tr1').click(
function() {
    $('.tr1').each(
    function(i,n){
    $(n).меняем_стиль()
    });
});

stanlee 25.12.2008 11:42

хм такой код меняет стразу во всех строках стили
а как только у одной строки?

Gvozd 25.12.2008 11:50

заменить
$('.tr1').each(
    function(i,n){
    $(n).меняем_стиль()

на
$("элемент_который_меняем").меняем_стиль()

stanlee 25.12.2008 12:15

дык у меня не один блок строк
те
<tr class='tr1'>
<td rowspan=2></td>
<td></td>
</tr>
<tr class='tr1'>
<td></td>
</tr>
....
<tr class='tr1'>
<td rowspan=2></td>
<td></td>
</tr>
<tr class='tr1'>
<td></td>
</tr>
....
<tr class='tr1'>
<td rowspan=2></td>
<td></td>
</tr>
<tr class='tr1'>
<td></td>
</tr>



"элемент_который_меняем" это на 1 блок сработает

а если таблица длинная то чета я в тупик засел (

Gvozd 25.12.2008 15:26

Блин, у меня ломается мозг от вашего описания задачи.
Вам надо так?
если пользователь щелкнул на первую или вторую строчку, то первая И вторая подсвечиваются
есди клдикнул на третью или четвертую, то третья И четвертая подсвечивается.

Если я правильно опичсал что вам надо, то мое первое исправленное решение вам должно подойти.
ТОЛЬКО
только вам надо для каждой такой группы чтрок свой класс сделать
ПО примеру
tr1 tr2 tr3 tr4
И для каждого такого блока вызвать то, что я писал
Если я вас неправильно понял, опишите в похожем формате, что вам надо

Octane 25.12.2008 15:58

Как-то так
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
table {
border-spacing: 0;
border-collapse: collapse;
}
table, td, th {
border: 1px solid #ccc;
}
tr.selected {
background: #ffc;
}
</style>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
<script type="text/javascript">
$(function() {
	var rows = $('table').click(function(e) {
		var node = $(e.target);
		if(node.is('td')) {
			rows.removeClass('selected');
			node = node.parent().addClass('selected');
			if(node.children().attr('rowspan') == 2) node.next().addClass('selected');
			else if(node.prev().children().attr('rowspan') == 2) node.prev().addClass('selected');
		}
	}).find('tbody tr');
});
</script>
</head>
<body>
	<table>
		<thead>
			<tr>
				<th>Заголовок 1</th>
				<th>Заголовок 2</th>
				<th>Заголовок 3</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td rowspan="2">Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td rowspan="2">Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td rowspan="2">Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
			<tr>
				<td>Ячейка</td>
				<td>Ячейка</td>
				<td>Ячейка</td>
			</tr>
		</tbody>
	</table>
</body>
</html>


работает только для rowspan == 2

stanlee 26.12.2008 12:17

спасибо большое )

но я заметил одну весч
этот метод не универсален а зависит от rowspan
буду пробовать сделать универсальнее

alexandre 24.11.2009 01:38

У меня тоже вопрос по теме мне нужно при щелчке по нужной ячейке вставить в нее инпут а в него то значение что было в этой ячейке.
Просто со вставкой в нужную ячейку инпута все вроде просто а вот с вставкой в инпут нужного значения или даже просто с правильным получением значения проблемы:
$('table td').click(function(){ 
			var str = $(this).text();			
			$("#value input").val('str');					
			$(this).append('<input name="date" type="text">').val('str');            		 
            		});

в ячейку рядом с значением вставляет просто инпут а если поэкспереметировать то получает тока название переменной str но в инпут который в ячейке и его не вставляет вставляет в другой какой нибудь инпут за пределами таблички.

mcpro 25.11.2009 12:15

дык.. а нельзя ли просто использовать toggleClass
http://docs.jquery.com/Attributes/toggleClass#class
вроде гораздо проще будет )

alexandre 26.11.2009 01:28

А как можно внести значение ячейки в инпут с помощью toggleClass насколько я понимаю это чтото типа addClass? Я примеров с toggleClass похожих на то что мне нужно не нашол.

Андрей38 10.02.2011 16:47

Цитата:

Сообщение от stanlee (Сообщение 3028)
Начал изучать эту либу
не пойму как сделать действие чтобы при кликании на ячейку таблицы менялся цвет и обратно

вернее как обратно не пойму

вот мы запускаем прцесс смены класса при нажатии
$(".table tr").click(function() {$(this).addClass("over");});

а дальше как?

Вместо addClass("over");}); пишем
toggleClass("over");});
а еще лучьше,кажеться _ switchClass ('over','OVER').

А для точности проверь этот самый switchClass на Офсайте Квери или на русскоязычных , мне нравитося этот http://slyweb.ru/jquerydoc/switchCla...d-duration.php
Скопированный оттуда пример $(".newClass").switchClass('newClass', 'anotherNewClass', 1000); 1000- не знаю что это такое_ анимация наверное ,даже.

FINoM 14.02.2011 01:16

$('.tr1').hover(
   function() {
        $('.tr1').addClass('hover');
},function() {
        $('.tr1').removeClass('hover');
});

в css пиши
.hover{background-color: цвет при наведении }


Можно конечно задействовать метод .css, но при этом представление поведения элементов придется содержать в js коде.

Upd
Пардон, только заметил, что страниц обсуждения больше чем одна, поэтому, возможно, решение было выше.

polkin 28.02.2011 09:18

Вопрос
Есть ячейка с изначальным значением 0, хочу сделать так что бы при клике на нее ноль пропадал и было пустое поле для ввода цифр.
не могу никак, совсем не опытный:)
помогите...

FINoM 01.03.2011 23:48

Смотри метод .html()

Андрей38 04.03.2011 15:42

Цитата:

Сообщение от polkin (Сообщение 94299)
Вопрос
Есть ячейка с изначальным значением 0, хочу сделать так что бы при клике на нее ноль пропадал и было пустое поле для ввода цифр.
не могу никак, совсем не опытный:)
помогите...

Смотри метод .html().....А точнее- РиплейсВиз_ Далее в круглых собках в КАВЫЧКАХ заключаеш тег инпута который, в свою очередь, заключаешь в тег ТД . Для удаления инпута_ используй спец-клик_ называется БЛЮР.Хотя последнее я так и не смог реализовать )

lalala 04.03.2011 17:11

Цитата:

Сообщение от polkin (Сообщение 94299)
Вопрос
Есть ячейка с изначальным значением 0, хочу сделать так что бы при клике на нее ноль пропадал и было пустое поле для ввода цифр.
не могу никак, совсем не опытный:)
помогите...

Вот как то так...думаю, не совсем то, что Вам надо, но доделать вполне реально :)
$('#td1').bind('click',function(){
	$(this).html('<input type="text" value="'+$(this).text()+'"/>');
	$($(this).children().get(0)).focus().blur(function(){
		if ($(this).val()){
			$(this).parent().html($(this).val());
		}
		else {
			$(this).parent().html('&nbsp;');
		};
	});
});

Андрей38 11.03.2011 13:49

Цитата:

Сообщение от lalala (Сообщение 94933)
Вот как то так...думаю, не совсем то, что Вам надо, но доделать вполне реально :)
$('#td1').bind('click',function(){
	$(this).html('<input type="text" value="'+$(this).text()+'"/>');
	$($(this).children().get(0)).focus().blur(function(){
		if ($(this).val()){
			$(this).parent().html($(this).val());
		}
		else {
			$(this).parent().html('&nbsp;');
		};
	});
});

...:thanks: Шикарный скрипт...


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