Javascript.RU

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

Сообщение от `p r o x y
- либо выделенный текст
для строк: пустая будет считаться как false

Сообщение от `p r o x y
- либо ошибки, при попытки определить выделенный текст
что за ошибки и какой тип данных? undefined и null тоже будут считаться как false
Ответить с цитированием
  #12 (permalink)  
Старый 04.07.2009, 03:11
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

x-yuri,
понял, значит моя конструкция:
if(!selText) return;

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

А как из метода одного объекта, вызвать другой метод этого же объекта?

function QuickQuote(){
	document.write('<div onmousedown="quickQuote.showSelText()" class="button" id="divQuickQuote" style="z-index:1000;cursor:pointer;position:absolute;visibility:hidden"><b>Цитировать</b></div>');
	var selText = '';
	
	this.GetSelText = function(){
		selText = '';
		if (window.getSelection && !window.opera) 	selText = window.getSelection();
		else if (document.getSelection) 			selText = document.getSelection();
		else if (document.selection) 				selText = document.selection.createRange().text;
		
		selText.toString().replace(/(\r?\n\s*){2,}/gi,'\r\n').replace(/^\s+|\s+$/gi,'').replace(/(\ |\t)+/gi,' ');
		if (!selText) selText = '<error>';
		
		this.ShowSelText;
	};
	
	this.ShowSelText = function(){
		alert(selText);
	};

}

var oQQ = new QuickQuote();
window.onload = function(){
	document.onkeyup	= oQQ.GetSelText;
	document.onmouseup	= oQQ.GetSelText;
}


почему не срабатывает и как сделать, что бы работало?
this.ShowSelText;

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

если ты пишешь
function o() {
    this.method = function() {}
}

для каждого объекта будет создан свой "экземпляр" метода. Лучше
function o() {}
o.prototype.method = function() {}


this.ShowSelText - ссылка на метод, чтобы его вызвать нужно добавить ()
Ответить с цитированием
  #15 (permalink)  
Старый 04.07.2009, 04:21
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Сообщение от x-yuri Посмотреть сообщение
если ты пишешь
function o() {
    this.method = function() {}
}

для каждого объекта будет создан свой "экземпляр" метода. Лучше
function o() {}
o.prototype.method = function() {}


this.ShowSelText - ссылка на метод, чтобы его вызвать нужно добавить ()
вот это, как раз, не укладывается у меня в сознании - с prototype-ами ....посмотри, пожалуйста, по коду. Все ли нормально? Можешь именно на примере моего кода ткунть, как и что лучше - так думаю пойму .....

Цитата:
this.ShowSelText - ссылка на метод, чтобы его вызвать нужно добавить ()
пробовал и так, конечно:
this.ShowSelText();

все равно "ошибка на странице" и никакого alert-а ...


У меня происходит вызов: document.onmouseup = oQQ.GetSelText;
выделенный текст записывается в selText для объекта oQQ.
Вот только низ метода document.onmouseup = oQQ.GetSelText;
не получается вызвать метод this.ShowSelText ...

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

Цитата:
Можешь именно на примере моего кода ткунть, как и что лучше - так думаю пойму .....
прийдется понимать на моих примерах. Если в объекте не найден метод, он ищется в прототипе. Есть еще вопросы?

Цитата:
все равно "ошибка на странице" и никакого alert-а ...
поставь ff и посмотри в консоль ошибок или поставь/включи отладчик для ie
Ответить с цитированием
  #17 (permalink)  
Старый 04.07.2009, 05:16
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
Есть еще вопросы?
есть, что это значит:
Цитата:
Если в объекте не найден метод, он ищется в прототипе.
Цитата:
прийдется понимать на моих примерах.
да лана, тебе умничать, я же НЕ прошу за меня решить мою задачу. Наоборот - разобраться желаю ) Просто реально не могу ухватиь суть, в этом, пока. ......)

я же не стал бы писать, если б все понимал ))

если использовать:
this.ShowSelText();

ошибка: this.ShowSelText is not a function

ну а если так:
this.ShowSelText

то и ошибок нет и alert-а нет ...


тогда так:
function QuickQuote(){
	document.write('<div onmousedown="quickQuote.showSelText()" class="button" id="divQuickQuote" style="z-index:1000;cursor:pointer;position:absolute;visibility:hidden"><b>Цитировать</b></div>');
	var selText = '';
}
QuickQuote.prototype.GetSelText = function(){
	selText = '';
	if (window.getSelection && !window.opera) 	selText = window.getSelection();
	else if (document.getSelection) 			selText = document.getSelection();
	else if (document.selection) 				selText = document.selection.createRange().text;
	
	selText.toString().replace(/(\r?\n\s*){2,}/gi,'\r\n').replace(/^\s+|\s+$/gi,'').replace(/(\ |\t)+/gi,' ');
	if (!selText) return;
	
	this.ShowSelText();
}
QuickQuote.prototype.ShowSelText = function(){
	alert('sdf');
}

var oQQ = new QuickQuote();
window.onload = function(){
	document.onkeyup	= oQQ.GetSelText;
	document.onmouseup	= oQQ.GetSelText;
}

все равно ошибка:
Цитата:
this.ShowSelText is not a function

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

в общем, без prototype-ов, так и не понял как добиться вызова одного метода из другого метода, одного и того же объекта. А с prototype-ом, вариант такой:

function QuickQuote(e){
	document.write('<div onmousedown="QuickQuote.showSelText()" class="button" id="divQuickQuote" style="z-index:1000;cursor:pointer;position:absolute;visibility:hidden"><b>Цитировать</b></div>');
	this.SelText = '1';
}
QuickQuote.prototype.GetSelText = function(){
	SelText = '';
	if (window.getSelection && !window.opera) 	SelText = window.getSelection();
	else if (document.getSelection) 			SelText = document.getSelection();
	else if (document.selection) 				SelText = document.selection.createRange().text;
	
	SelText.toString().replace(/(\r?\n\s*){2,}/gi,'\r\n').replace(/^\s+|\s+$/gi,'').replace(/(\ |\t)+/gi,' ');
	if (!SelText || SelText == '') return;

	QuickQuote.prototype.ShowSelText();
}
QuickQuote.prototype.ShowSelText = function(){
	alert(SelText);
}

var oQQ = new QuickQuote();
window.onload = function(){
	document.onkeyup	= oQQ.ShowSelText;
	document.onmouseup	= oQQ.GetSelText;
}
Ответить с цитированием
  #19 (permalink)  
Старый 04.07.2009, 22:15
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от `p r o x y
да лана, тебе умничать
сам ты умничаешь

Сообщение от `p r o x y
Если в объекте не найден метод, он ищется в прототипе.
function c() {}
c.prototype.m1 = function() { alert(1); }
var o = new c();
o.m2 = function() { alert(2); }
o.m1();
o.m2();


Цитата:
в общем, без prototype-ов, так и не понял как добиться вызова одного метода из другого метода, одного и того же объекта
потом разберешься, если понадобится

Сообщение от `p r o x y
А с prototype-ом, вариант такой
лучше по-другому
function c() {}
c.prototype.m1 = function() { 
    alert(this instanceof c);
    if( this.m2 )
        this.m2();
}
c.prototype.m2 = function() { alert(2); }
var o = new c(); // здесь содержимое c.prototype
    // копируется в прототип объекта o
var o2 = {
    m3: o.m1, // эта ссылка указывает на o.prototype.m1
        // (в объекте o нету метода m1
        // но он есть в прототипе)
    m4: function() {
        // вызываем функцию o.m1 так,
        // чтобы this указывал на o
        o.m1.call( o );
    }};
o2.m3(); // при вызове this будет указывать на o2
    // а в объекте o2 нету метода m2
o2.m4();
Ответить с цитированием
  #20 (permalink)  
Старый 05.07.2009, 00:34
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

x-yuri,
...блин......пойду рисовать схемы.
Понимать то понимаю, но вот как обычно, в сознании, структура так и не прояснилась. Че то не хватает....)

Благодарю.

БЛИн )) но его доканаяю.....на функциях то просто все...

Последний раз редактировалось `p r o x y, 05.07.2009 в 01:21.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос как сделать эту панельку Определённых размеров и свойств. 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