Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   глючит функция (https://javascript.ru/forum/jquery/3137-glyuchit-funkciya.html)

User 21.03.2009 18:43

глючит функция
 
Нужно подправить функцию:
function getSettings(el) {
		return $(el).parents('ul.jd_menu_flag_root')[0].$settings;
	}

Вызывается она так:
var settings = getSettings(this);
Браузер ругается "есть null или не является объектом", но далее выполняет.
Заранее спасибо.

Gvozd 21.03.2009 19:04

во первых для фреймворков есть отдельный раздел форума. туда и надо было писать

во вторых: откуда ваша функция вызывается?вы хоть знаете что такое this? чему оно равно в момент вызова?
подозреваю, что вызывается функция из глобального контекста, и this поэтому равен window
соответственно для window-а никаких parent-ов быть не может, поэтому и null
вызывайте функция с параметром указывающим на какой-то DOM-элемент, например из обработчика события.

x-yuri 23.03.2009 04:49

Цитата:

для window-а никаких parent'ов быть не может
может, каждому frame'у соответствует свой объект window

Gvozd 23.03.2009 07:48

x-yuri,
я скорее высказал предположение.
я не сильно уверено владею jQuery
но насколько я помню большинство функций в нем ориентированы на работу с DOM, а не с объектной системой.
в таком контексте логично предположить, что parents возвращает множество нодов-предков.
а что в контексте объектной иеархии по вашему должна возвращать эта функция?какой из множеста объекто имеющих window iframe-а своим свойством.особенно учитывая, что таких parents-ов мы можем наделать сколько угодно, и в JS нету никакой возможности отследить всех.
точно также нельзя отследить прототип кросбраузерно для объекта.
поэтому подозреваю, что все-таки функция предназначена для DOM-элементов, и не должна возвращать для window что-либо
PS все-таки глянул документацию.в общем мое предположение работы функции оказалось верным

x-yuri 23.03.2009 17:55

Gvozd, ну я твои слова буквально воспринял: "для window-а никаких parent'ов быть не может" и решил поправить ;-)


Часовой пояс GMT +3, время: 07:47.