Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 05.07.2009, 02:01
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от `p r o x y
Понимать то понимаю, но вот как обычно, в сознании, структура так и не прояснилась. Че то не хватает....)
значит чего-то не понимаешь. Для начала нужно выяснить, чего именно, а потом начать задавать вопросы
Сообщение от `p r o x y
БЛИн )) но его доканаяю.....на функциях то просто все...
а на чем не просто?
Ответить с цитированием
  #22 (permalink)  
Старый 06.07.2009, 22:19
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
а на чем не просто?
да все просто и понятно. НО, есть но, когда начинаю разбираться в коде с объектами, в сознании, теряется понимание структуры, какие методы наследуют у каких, что с чем связанно, т.е. ясного представления цепочки объектов/методов.

Пишу то на php и под win на скриптах - там большенство без объектов/классов (т.е. подобия ооп), вот и не привычно. На js первый раз начал разбираться с объектами.

Благодарю за терпение. Сейчас привел в готовый вид вариант на функциях, и скланяюсь к варианту, что это реализация лучше для данной задачи.

Хотя, все таки доделаю и на объектах - для сравнения и понимания.

А пока, рабочий вариант на функциях. Провернно: IE 6, Opera 9, FF 3, (Chrome, Safari 3 немного криво вставляются \r\n).

// When a generated page (in PHP, Perl or something else)
// need add to each post (DIV, TABLE, TR, TD): onmouseover="qqNick='user nick'"
// Exsample: <tr class="bugnote" id="c59" onmouseover="qqNick='TikTak'">

// QuickQuote Settings:
var qqLinkShowTime 	= 3000;
var qqLinkId  		= 'quickQuote';
var qqLinkStyle		= 'z-index:1000; cursor:pointer; position:absolute; visibility:hidden';
var qqLinkText		= '<b>Цитировать</b>';
var qqTextAreaId   	= 'bugnote_text'; // id or name
//_____________________

document.write(	'<div 	onmousedown="qqInsertText()" onmouseout="qqTimerStart()" onmouseover="qqTimerStop()" \
						class="button" id="'+qqLinkId+'" style="'+qqLinkStyle+'">'+qqLinkText+'</div>');

var qqText, qqNick, qqTimerId, qqLink = document.getElementById(qqLinkId);
document.onclick   = qqGetSelText;
document.onmouseup = qqLinkShow;

document.body.onload = function(){
	var oTextArea = document.getElementById(qqTextAreaId);
	if (oTextArea == null) oTextArea = document.getElementsByName(qqTextAreaId)[0];
	if (oTextArea == null) return;
	
	oTextArea.onselect = saveCaretPos;
	oTextArea.onclick  = saveCaretPos;
	oTextArea.onkeyup  = saveCaretPos;
}

function qqTimerStart(){ qqTimerStop(); qqTimerId = setTimeout(qqLinkHide, qqLinkShowTime); }
function qqTimerStop(){  clearTimeout(qqTimerId); }
function qqLinkHide(){ 	 qqLink.style.visibility = 'hidden'; }

function qqLinkShow(event){
	qqGetSelText();
	if (qqText == '') return;
	
	var mc = event || window.event;
	if (mc.pageX || mc.pageY){
		mc.X = mc.pageX;
		mc.Y = mc.pageY;
	}else if (mc.clientX || mc.clientY){
		mc.X = mc.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		mc.Y = mc.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
	}
	qqLink.style.left = (mc.X-35)+'px';
	qqLink.style.top  = (mc.Y+11)+'px';
	qqLink.style.visibility = 'visible';
	
	qqTimerStart();
}
function qqGetSelText(){
	qqText = getSelText();
	qqText.replace(/(\r?\n\s*){2,}/gi,'\r\n').replace(/^\s+|\s+$/gi,'').replace(/(\ |\t)+/gi,' ');
	if (qqText == '') qqLinkHide();
}
function qqInsertText(){
	qqLinkHide();
	var oTextArea = document.getElementById(qqTextAreaId);
	if (oTextArea == null) oTextArea = document.getElementsByName(qqTextAreaId)[0];
	if (oTextArea == null) return;
	insertText(oTextArea, '[q]'+qqNick+': ' + qqText + '[/q]\r\n');
}

function insertText(obj, text){
	if (window.getSelection && !window.opera) var caretPos = obj.selectionStart + text.length;
	
	if (obj && obj.caretPos) 
		   obj.caretPos.text = text; 
	else if (obj && obj.selectionStart+1 && obj.selectionEnd+1)
		   obj.value = obj.value.substring(0, obj.selectionStart) + text + obj.value.substring(obj.selectionEnd, obj.value.length);
	else if (obj)
		   obj.value += text;
	
	if (window.getSelection && !window.opera) obj.setSelectionRange(caretPos, caretPos);
}
function getSelText(){
	if (window.getSelection && !window.opera) 	var selText = window.getSelection(); // ff
	else if (document.getSelection) 			var selText = document.getSelection(); // opera
	else if (document.selection) 				var selText = document.selection.createRange().text; // ie
	if (!selText) selText = '';
	return selText.toString();
}
function saveCaretPos(event){
	event = event || window.event;
	var obj = event.target || event.srcElement;
	if (typeof(document.selection) != 'undefined' && typeof(document.selection.createRange) != 'undefined')
	obj.caretPos = document.selection.createRange().duplicate();
}

Последний раз редактировалось `p r o x y, 06.07.2009 в 22:23.
Ответить с цитированием
  #23 (permalink)  
Старый 06.07.2009, 23:24
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

1) тебе "классы" тут не особо то и нужны. У тебя же скрипт рассчитан на один экземпляр (на странице одна textarea, с которой работаем)
2) функции, используемые только в одной (другой) функции можно туда же и запихнуть (чтобы не создавать лишних глобальных имен)
function a() {
   ...
   b();
   ...
   function b() { ... }
}

3) можно использовать DOM-элементы для хранения информации вместо глобальных переменных
4) можно использовать namespace'ы
(function() {
    // идентификаторы объявленные здесь
    // не будут видны снаружи
})();
Ответить с цитированием
  #24 (permalink)  
Старый 06.07.2009, 23:37
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
x-yuri
п. 1, ну опять же, делал с другого скрипта, вот и решил делать на "классах", тперь мне уже ясней, что тут то это и не нужно.
п. 2-3 очень интересны, поработаю.
п. 4 хм..а зачем? ...ну наверно полезное...

Благодарю, за комментарий.
Ответить с цитированием
  #25 (permalink)  
Старый 07.07.2009, 00:44
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от `p r o x y
п. 4 хм..а зачем?
чтобы не было много глобальных переменных: если два скрипта используют глобальную переменную (функцию, "класс") с одним и тем же именем, то у них будут проблемы
Ответить с цитированием
  #26 (permalink)  
Старый 07.07.2009, 08:15
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
если два скрипта используют глобальную переменную (функцию, "класс") с одним и тем же именем, то у них будут проблемы
это само собой понятно.
для этого имена переменных и функций выбрал с префиксом...
хотя конечно раааазное бывает )
Ответить с цитированием
  #27 (permalink)  
Старый 07.07.2009, 08:21
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

для полноты, префикс можно и точкой отделять:
var Ajax = {
    get: function() { ... }
}
// или так
// var Ajax = {};
// Ajax.get = function() { ... };
...
Ajax.get(...);

т.е. наличие точки не означает наличие "класса" (использование оператора new)
Ответить с цитированием
  #28 (permalink)  
Старый 07.07.2009, 09:31
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
т.е. наличие точки не означает наличие "класса" (использование оператора new)
умм, уже интересней. такие подробности синтаксиса очень интересны, еще не встречал!
Ответить с цитированием
  #29 (permalink)  
Старый 07.07.2009, 10:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от x-yuri
тебе "классы" тут не особо то и нужны. У тебя же скрипт рассчитан на один экземпляр (на странице одна textarea, с которой работаем)
А потом вдруг понадобится еще один textarea на странице и, вместо того, чтобы просто его добавить, шуруем переписывать скрипты.
Ответить с цитированием
  #30 (permalink)  
Старый 07.07.2009, 16:17
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Сообщение от Kolyaj Посмотреть сообщение
А потом вдруг понадобится еще один textarea на странице и, вместо того, чтобы просто его добавить, шуруем переписывать скрипты.
вот поэтому, все же, сделаю два варианта - и обучение и вариант для развития )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24
как сделать плавное затухание страницы magistr_bender Элементы интерфейса 1 18.03.2009 14:34
Как сделать справочное окно? Vlaimir Events/DOM/Window 13 05.01.2009 14:06