powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Расширение OnAvailable для JQuery
2 сообщений из 2, страница 1 из 1
Расширение OnAvailable для JQuery
    #34657885
Фотография Viktor Bartel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем,


Я в последнее время усиленно использую JQuery, супер вещь, да вот тока мне для работы с AJAX-подгружаемыми страницами жуть как не хватало обработчика событий OnAvailable(как у YUI) для различных элементов динамически включаемых в DOM. Так вот я такое расширение написал, только вот не совсем уверен что оптимально выполнил задачу. Уважаемые эксперты Javascript не могли бы вы высказать ваше мнение по поводу ниже представленного кода. Особенно я не уверен в функции setInterval.
Код расширения :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
jQuery.fn.onAvailable = function(elementId,fn) {
	jqListener = {
		processId : null,
		toDisable : false,
		elementId	: null
	};
	if(!window.jqListenersCollection) {
		jqListenersCollection = new Array();
		setInterval(function(){startProcessKiller()}, 10 );
	}
	
	if(getEl(elementId)) {
		callFunction(fn);
	}
	else {
		jqListener.elementId = elementId;
		jqListener.processId = setInterval(function(){
			checkElement(elementId,fn);
		},  20 );
		jqListenersCollection[jqListenersCollection.length] = jqListener;
	}
	
	function getEl(id) {
		return document.getElementById(id);
	};
	function callFunction(fn) {
		if (!fn || !fn.call) {
      return false;
    }
		else {
			fn.call();
		}
		return true;
	};
	function startProcessKiller() {
		for(var i= 0 ;i<jqListenersCollection.length;i++) {
			var tmpEl = jqListenersCollection[i];
			if(tmpEl.toDisable == true) {
				clearInterval(tmpEl.processId);
				jqListenersCollection.splice(i, 1 );
			}
		}
		return false;
	}
	function checkElement(elementId,fn) {
		if(getEl(elementId)) {
			var index = searchListenerByElemId(elementId,jqListenersCollection);
			var listener = jqListenersCollection[index];
			if(listener == undefined) {
				throw new Exception("Listener could not be undefined");
			}
			else {
				listener.toDisable = true;
				jqListenersCollection[index] = listener;
			}
			callFunction(fn);
		}
		return false;
	};
	function searchListenerByElemId(elementId,collection) {
		for(var i= 0 ;i<collection.length;i++) {
			var tmpEl = collection[i];
			if(tmpEl.elementId == elementId)
				return i;
		}
		return null;
	}
	function removeFromCollection(jqListener,collection) {
		for(var i= 0 ;i<collection.length;i++) {
			var tmpEl = collection[i];
			if(tmpEl.processId == jqListener.processId)
				collection.splice(i, 1 );
		}
		return false;
	}
};
Пример использования:
Код: plaintext
1.
$().onAvailable('Splitter',function(){alert('Hello world')});
Заранее вас благодарю.

--
С уважением
Виктор Бартель
...
Рейтинг: 0 / 0
Расширение OnAvailable для JQuery
    #34658851
Фотография Viktor Bartel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну видимо притензий нет у господ экспертов. С пивом потянет :) .
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Расширение OnAvailable для JQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]