Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2011, 03:40
Аспирант
Отправить личное сообщение для prowoke Посмотреть профиль Найти все сообщения от prowoke
 
Регистрация: 09.12.2010
Сообщений: 56

Посмотрите мой создать сообщений.
После прочтения фленагана, решил написать, что-то более чем 50 строчек. Придумал себе задачу и вот, что получилось:
http://deluxe-okna.ru/testing.html

Особенности:

1. Анимированно раскрываются/закрываются поля textarea
2. После того как создали сообщение, его можно двигать стрелками на клавиатуре, если выбран способ соответствующий и также можно двигать по drag&drop, если выбран способ "мышью".
3. Пока все поля не заполнены и кнопка не зелёная, то создать форму нельзя.
4. Создать форму можно клавищей "Enter" и также закрывать её.
5. Размеры блоков в главном блоке идут через пропорцию.


В коде, конечно, ужас. Но я пока фиговый программист, хотел всё это в ООП, но ООП плохо понимаю, поэтому решил не городить, следующее задание уже буду в ООП делать.
Я просто когда делал, старался как можно больше возможностей js использовать. Работа с DOM, события с клавиатуры и мыши, работы с формами.

В общем, если кто просмотрит код, скажите прям аж сразу бросающиеся в глаза косяки. После этой штуки, теперь хочу ещё чуток почитать и приступить с написанию своей библиотеки. Думаю это будет действительное сложное задание.

Последний раз редактировалось prowoke, 04.08.2011 в 03:43.
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2011, 09:40
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

1. Старайтесь обойтись без определения браузера. Определяйте возможности браузера, а не его самого.
if (getBrowserName() == 'IE') textarea_tr = checkElement.parentNode.parentNode.nextSibling;
else textarea_tr = checkElement.parentNode.parentNode.nextSibling.nextSibling;
Здесь, сдается мне, Вы хотите получить следующий за родителем элемент, но в IE появляется какой-то другой (текстовый?) промежуточный узел. Такое же возможно и в других браузерах, поэтому лучше перебирать все следующие за родителем элементы, пока их nodeType не станет равным 1 (это значение для элементов, для текстовых узлов. например, 2).

2. Если Вы автоматически вызываете функцию, обрамите её тело в скобки (даже если она уже является частью выражения). Иначе может быть непонятно, что будет результатом выражения - то ли функция. то ли результат её выполнения.

3. Нет необходимости в таймауте в 1мс. Браузеры не будут так быстро реагировать, а Вы будете их только зря нагружать. 40мс должно быть достаточно.
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2011, 11:04
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Чтобы не писать лишний код, старайтесь его оптимизировать.
Для начала начните с attachEvent
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2011, 12:00
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

при движении по enter фокус меняется у чекбоксов дополнительно
Ответить с цитированием
  #5 (permalink)  
Старый 05.08.2011, 02:03
Аспирант
Отправить личное сообщение для prowoke Посмотреть профиль Найти все сообщения от prowoke
 
Регистрация: 09.12.2010
Сообщений: 56

Сообщение от Shaci Посмотреть сообщение
при движении по enter фокус меняется у чекбоксов дополнительно
Не понял?



Цитата:
2. Если Вы автоматически вызываете функцию, обрамите её тело в скобки (даже если она уже является частью выражения). Иначе может быть непонятно, что будет результатом выражения - то ли функция. то ли результат её выполнения.
(getBrowserName())


Вы об этом?
Ответить с цитированием
  #6 (permalink)  
Старый 05.08.2011, 09:16
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от prowoke
Вы об этом?
Нет, я об этом:
checkElement.onclick = function(textarea_tr, height) {
	var i = 0, j = 0, h = height;
	return function() {
		textarea_tr.style.display = 'table-row';
		var textarea = '';
				if (getBrowserName() == 'IE')
					textarea = textarea_tr.firstChild.firstChild;
				else 		
					textarea = textarea_tr.firstChild.nextSibling.firstChild;

(function() {  // Функция, которая создаёт анимацию textarea
	if (++i <= h) {
		textarea.style.height = i + 'px';
		j = i;
		if (j >= h) return false;
	} else {
		textarea.style.height = --j + 'px';
		if (j <= 0) {
			i = 0;	
		textarea_tr.style.display = 'none';
			return false;
		}
	}
	window.setTimeout(arguments.callee,1);
	return false;
})();
			}
		}(textarea_tr, listTextareaCheck[checkId]); // Передача id кнопки и высоты textarea через замыкание
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно создать форму, работающую с внутренним сценарием arkushy Общие вопросы Javascript 13 13.07.2011 14:18
как создать в цикле несколько дочерних элементов одного уровня? DimonCry Общие вопросы Javascript 11 13.01.2011 10:46
Авто "объединение" последних сообщений ksa Сайт Javascript.ru 0 19.11.2010 11:58
Создать объект из строчек Hagrael Events/DOM/Window 16 09.07.2010 10:25
Создать узел <img> внутри <div> glutton Events/DOM/Window 1 09.11.2009 14:41