Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 25.03.2010, 18:07
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да вроде нет, сначала рендерим, потом засекаем второй раз.
var endTime = Date.now();
printOutput("100 iterations of setZeroTimeout took " + (endTime - startTime) + " milliseconds.");
i = 0;
startTime = Date.now();
setTimeout(test2, 0);
Ответить с цитированием
  #52 (permalink)  
Старый 25.03.2010, 20:39
Новичок на форуме
Отправить личное сообщение для artyv Посмотреть профиль Найти все сообщения от artyv
 
Регистрация: 23.03.2010
Сообщений: 9

Там где есть postMessage (а это, я так понимаю, FF, Chrome, Safari) можно сделать ещё проще — навесить на window свой кастомный эвент и будет работать как надо
Ответить с цитированием
  #53 (permalink)  
Старый 25.03.2010, 21:14
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Цитата:
Да вроде нет, сначала рендерим, потом засекаем второй раз.
рендеринг происходит после выхода из одного потока и до входа в следующий
__________________
.ня
Ответить с цитированием
  #54 (permalink)  
Старый 22.04.2011, 04:49
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Объясните мне тупому, почему все же отказались от решения с dispatchEvent ?

У меня следующий код вроде везде работает (кроме IE конечно):
var elem = document.createElement('div');
elem.onclick = function(e) {
	alert('Ok!');
};
var e = document.createEvent('HTMLEvents');
e.initEvent('click', false/* bubbles */, false/* cancelable */);
elem.dispatchEvent(e);
Ответить с цитированием
  #55 (permalink)  
Старый 22.04.2011, 09:41
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

потому что не работает в ие
__________________
.ня
Ответить с цитированием
  #56 (permalink)  
Старый 22.04.2011, 10:42
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от tenshi
потому что не работает в ие
для IE у меня еще такой вариант получился:
var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'), done = false;
xmlDoc.onreadystatechange = function() {
    if (!done) {
        done = true;
        alert('Ok!');
    }
};
xmlDoc.loadXML('');


но он медленный гад . done нужен потому-что событие срабатывает много раз и всякие this.onreadystatechange = null и xmlDoc.abort() его не отменяют.

tenshi, а зачем нужна фабрика, не проще сразу вызывать переданную функцию? Можно даже в Function.prototype добавить метод.
Ответить с цитированием
  #57 (permalink)  
Старый 22.04.2011, 11:34
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Riim
Можно даже в Function.prototype добавить метод.


Сообщение от Riim
но он медленный гад
Подойдет?!
var fragment = document.createDocumentFragment();
var node = document.createElement('div');
node.attachEvent('onpropertychange', function(){
	alert('Property change');
});
fragment.appendChild(node);
node.fireEvent('onpropertychange', document.createEventObject());
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #58 (permalink)  
Старый 22.04.2011, 11:52
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от B~Vladi
а что так?


Сообщение от B~Vladi
Подойдет?!
Супер! Тоже что-то с DocumentFragment пробовал, но у меня почему-то не заработало .

UPD: афигеть, даже без attachEvent можно:
var elem = $d.createElement('div');
$d.createDocumentFragment().appendChild(elem);
elem.onclick = handler;
elem.fireEvent('onclick', $d.createEventObject());

моя счастлив .

Последний раз редактировалось Riim, 22.04.2011 в 11:57.
Ответить с цитированием
  #59 (permalink)  
Старый 22.04.2011, 11:59
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Riim
а что так?
Великое зло
Даже не пытайтесь переубедить.

Сообщение от Riim
Тоже что-то с DocumentFragment пробовал, но у меня почему-то не заработало
Интересно, что этот код работает только в ИЕ8:
var fragment = document.createDocumentFragment();
var node = document.createElement('div');
node.attachEvent('onpropertychange', function(){
	alert('Property change');
});
fragment.appendChild(node);
node.innerHTML = '';

А вот если поместить его в документ, то всё ок.

Осталось только слить 2 скрипта вместе и готово.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 22.04.2011 в 12:02.
Ответить с цитированием
  #60 (permalink)  
Старый 22.04.2011, 12:06
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от B~Vladi
Великое зло
не хочешь рассказывать почему, злодей!


Сообщение от B~Vladi
Интересно, что этот код работает только в ИЕ8
ага, вот именно так я и пробовал, но тестил в IE6.
Ответить с цитированием
Ответ



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

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