Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.09.2010, 00:35
Новичок на форуме
Отправить личное сообщение для stryker Посмотреть профиль Найти все сообщения от stryker
 
Регистрация: 20.09.2010
Сообщений: 7

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

Так вот не пойму, как прицепить функцию по онклик.
Спасибо.

<style type="text/css" rel="stylesheet">
td:hover {
	background:#39F;
}
</style>
<script type="text/javascript">
	function setColor(){
	this.style.background = "green"; // ---эта строка почему-то не закрашивает ячейку
	}
		
	var n=3;
	// Отрисовка таблицы
	document.write("<table border='1' style='border-collapse:collapse; width:400px; height:400px;'>");
	// Отрисовка рядов таблицы
	for (var tr=1; tr<=n; tr++)
	{
		document.write("<tr>");
			// Отрисовка столбцов в рядах таблицы
			for (var td=1; td<=n; td++)
			{
				document.write("<td align='center' valign='middle' onclick='setColor()' id='tdcolor'>" + "A" + "</td>");
			}
		document.write("</tr>");
	}
	document.write("</table>");
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2010, 01:12
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Потому что в функции this ссылается на объект window, а не на ячейку.
Измени onclick на 'setColor(this)', а в функции сделай
function setColor(){
  arguments[0].style.background = "green";
}
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2010, 08:18
Новичок на форуме
Отправить личное сообщение для stryker Посмотреть профиль Найти все сообщения от stryker
 
Регистрация: 20.09.2010
Сообщений: 7

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

Последний раз редактировалось stryker, 20.09.2010 в 08:46.
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2010, 08:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

function setColor(a) {
    if (this.a && this.a != a) this.a.style.background = "";
    a.style.background = "green";
    this.a = a
};
Ответить с цитированием
  #5 (permalink)  
Старый 20.09.2010, 09:16
Новичок на форуме
Отправить личное сообщение для stryker Посмотреть профиль Найти все сообщения от stryker
 
Регистрация: 20.09.2010
Сообщений: 7

ну и последний вопрос, если позволите.

<script type="text/javascript">
	function setColor(a) { 
		if (this.a && this.a != a) this.a.style.background = "white"; 
		a.style.background = "green"; 
		this.a = a;
		};

	function setColor2(b) {
		if (this.b && this.b != b) this.b.style.background = "white"; 
		b.style.background = "#39F"; 
		this.b = b;
		};

	var n=3;
	// Отрисовка таблицы
	document.write("<table border='1' style='border-collapse:collapse; width:400px; height:400px;'>");
	// Отрисовка рядов таблицы
	for (var tr=1; tr<=n; tr++)
	{
		document.write("<tr>");
			// Отрисовка столбцов в рядах таблицы
			for (var td=1; td<=n; td++)
			{
				document.write("<td align='center' onmouseover='setColor2(this)' valign='middle' onclick='setColor(this)' id='tdcolor'>" + "A" + "</td>");
			}
		document.write("</tr>");
	}
	document.write("</table>");
</script>


по onmouseover не совсем корректро работает закрашивание в зеленый цвет, который берется по onclick.
Если же делать через стили, а не через onmouseover, то цветом #39F закрашиваются при наведении не все ячейки.
Как быть?

Последний раз редактировалось stryker, 20.09.2010 в 09:25.
Ответить с цитированием
  #6 (permalink)  
Старый 20.09.2010, 09:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от stryker
Если же делать через стили, а не через onmouseover, то цветом #39F закрашиваются при наведении не все ячейки
это как? может просто обьяснишь чего хочешь в целом )))
Ответить с цитированием
  #7 (permalink)  
Старый 20.09.2010, 10:12
Новичок на форуме
Отправить личное сообщение для stryker Посмотреть профиль Найти все сообщения от stryker
 
Регистрация: 20.09.2010
Сообщений: 7


со стилями изначально было так: <style type="text/css" rel="stylesheet">
td:hover {
background:#39F;
}
потом шел код js.

А хочется без стилей через onmouseover.
Ответить с цитированием
  #8 (permalink)  
Старый 20.09.2010, 10:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

stryker,
а зачем стиль скриптом заменять?
Ответить с цитированием
  #9 (permalink)  
Старый 20.09.2010, 10:22
Новичок на форуме
Отправить личное сообщение для stryker Посмотреть профиль Найти все сообщения от stryker
 
Регистрация: 20.09.2010
Сообщений: 7

да не по собственной воле-то
пример работы стилей тут: http://195.225.172.165/

и здесь видно, что если какая-то ячейка уже была кликнута, то в последующем на ней этот стиль не срабатывает.
Иначе говоря, если я по всем ячейкам таблицы прокликаю, то голубой подсветки на ячейках я уже не увижу.
Ответить с цитированием
  #10 (permalink)  
Старый 20.09.2010, 10:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

<script type="text/javascript">
	function setColor(a) {
    if (this.a && this.a != a) this.a.style.background = "white";
    a.style.background = "green";
    this.a = a
}
function setColor2(a) {
    a.style.background = "#39F"
}
function setColor3(a) {
    a.style.background = a != this.a ? "white" : "green"
};
var n = 3;
document.write("<table border='1' style='border-collapse:collapse; width:400px; height:400px;'>");
for (var tr = 1; tr <= n; tr++) {
    document.write("<tr>");
    for (var td = 1; td <= n; td++) {
    document.write("<td align='center' onmouseout='setColor3(this)' onmouseover='setColor2(this)' valign='middle' onclick='setColor(this)' id='tdcolor'>A</td>")};
    document.write("</tr>")
}
document.write("</table>");
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста, помогите с созданием скрипта! Елизавета Общие вопросы Javascript 10 08.06.2010 13:20
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите пожалуйста, очень срочно!!! PAMAC AJAX и COMET 1 20.10.2009 23:38
Помогите, пожалуйста! rzhsasha Ваши сайты и скрипты 2 20.07.2009 21:07
Помогите, пожалуйста zashibis Общие вопросы Javascript 1 02.12.2008 14:07