Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект, вызвавший функцию, можно ли определить. 
V
    Опции темы
smartov
Дата 2.7.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Есть такая модель. Есть форма. У неё по событию submit вызывается какая-то функция. 
Код

<form ... onsubmit="my_function(this)">
...


Внимание вопрос smile
Можно ли внутри той функции (my_function) получить ссылку или id формы, по сабмиту которой она вызвалась.

Нужно это потому, что хотелось бы не передавать все время в функцию this как ссылку на форму.

Это сообщение отредактировал(а) smartov - 2.7.2007, 14:27
PM MAIL   Вверх
stup
Дата 2.7.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.4.2007

Репутация: нет
Всего: 1



Цитата(smartov @  2.7.2007,  14:26 Найти цитируемый пост)
Нужно это потому, что хотелось бы не передавать все время в функцию this как ссылку на форму.


На мой взгляд, это абсолютно нормальный подход. this же внутри функции будет ссылаться на window/document.
PM MAIL   Вверх
Zeroglif
Дата 2.7.2007, 15:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(smartov @  2.7.2007,  15:26 Найти цитируемый пост)
Можно ли внутри той функции (my_function) получить ссылку или id формы, по сабмиту которой она вызвалась

Низзя, потому как вызов my_function() прописан в теге, то есть он живёт внутри ещё одной "невидимой глазу" функции (не имеет значение , как и когда она создаётся), которая при возникновении события знает значение this и значение event. Она знает, а my_function не знает, отсюда необходимость передавать в неё аргументы.



PM MAIL WWW   Вверх
vasac
Дата 2.7.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



В IE через event, в Gecko, видимо, никак.
PM WWW   Вверх
Zeroglif
Дата 2.7.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



smartov, 

а чего ты прикипел-то к этому обработчику в теге, сделать форма.onsubmit = функция и будет нужный this или нельзя?

Добавлено через 5 минут и 54 секунды
Цитата(vasac @  2.7.2007,  16:26 Найти цитируемый пост)
В IE через event

Правильное уточнение, а то я обобщил про идентификатор event в inline-обработчике, IE может с event выкрутиться, единственное, не проверял, будет ли srcElement всегда вести на форму, как бы мы её не засабмитили. Кто-нибудь знает?

PM MAIL WWW   Вверх
smartov
Дата 2.7.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Zeroglif, хочется вместо
Код

<form ... onsubmit="my_function(this)">

писать просто
Код

<form ... onsubmit="my_function()">

 и чтобы все работало.

По идее я догадываюсь что такое неосуществимо, но мало ли...

vasac, 
Цитата(vasac @  2.7.2007,  14:26 Найти цитируемый пост)
В IE через event

поподробнее, пожалуйста.
PM MAIL   Вверх
AKS
Дата 2.7.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(vasac @  2.7.2007,  15:26 Найти цитируемый пост)
в Gecko, видимо, никак.

Код

<form ... onsubmit="my_function()">

Код

function my_function() {
    alert(arguments.callee.caller.arguments[0]); // object Event
}

Цитата(Zeroglif @  2.7.2007,  15:29 Найти цитируемый пост)
Кто-нибудь знает?

Решили подловить кого-нибудь? ;)

PM MAIL   Вверх
Zeroglif
Дата 2.7.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(AKS @  2.7.2007,  19:38 Найти цитируемый пост)
Решили подловить кого-нибудь?

 просто не уверен на 100% в ответе, за сим сильно ищу сильно уверенных... , никого я не ловлю, даже бабочек...  smile

Цитата(smartov @  2.7.2007,  19:12 Найти цитируемый пост)
поподробнее, пожалуйста

В IE event - свойство window, то есть есть из функции можно обращаться к соответствующему идентификатору и нет надобности передавать event в функцию аргументом. В gecko же event передаётся аргументом в ту функцию, что автоматом создаётся в теге и дальше двигается уже руками в любое место, в твоём случае передаётся в функцию my_function:

Код

<form ... onsubmit="my_function(event)">


Писать ручками event нам не подходит, т.к. аргументы по условию исключены (мы даже от this отказались), тогда AKS-молодец впомнил про свойство caller (увы, уже давно deprecated, но пока ещё работает), с помощью которого мы можем из тела функции my_function выйти на функцию, созданную в теге, а уже у этой функции получить её аргументы, вернее, один аргумент - ссылку на event. Получив event, можно определить элемент, на котором "зажглось событие", с помощью свойства target(gecko) или srcElement(IE), получится что-то вроде:

Код

function my_function(){
    var e = arguments.callee.caller.arguments[0] || event,
        t = e.target || e.srcElement;
    alert(t.nodeName); //-> может FORM, а может и нет
}

Я во всей этой затее вижу кучу узких мест (особенно, когда видишь из-за чего весь сыр-бор) и или оставил бы this в покое, или по-другому бы навешал обработчики...

PM MAIL WWW   Вверх
vasac
Дата 2.7.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



AKS, ну вот smile Только, по-моему кто-то из вас говорил, что caller лучше не использовать.

PS. А вот и про caller ответили, прежде чем я спросил )

Это сообщение отредактировал(а) vasac - 2.7.2007, 19:39
PM WWW   Вверх
AKS
Дата 2.7.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(vasac @  2.7.2007,  19:37 Найти цитируемый пост)
caller лучше не использовать

Показалось что беседа принимает философский оттенок, вот и "сунулся" с этим caller'ом. 
Цитата(Zeroglif @  2.7.2007,  19:35 Найти цитируемый пост)
 просто не уверен на 100% в ответе...

А мне просто сразу вспомнилась тема о событиях (точнее фрагмент другой темы на dklab), о возможности переопределения св-в объекта Event (созданного методом createEventObject). Вот отсюда и вопрос...

PM MAIL   Вверх
smartov
Дата 3.7.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Zeroglif, ясно. Да, много недоработано еще в javascript smile

Добавлено через 1 минуту и 4 секунды
Спасибо всем, тогда. Теа закрыта. Проще оставить this как есть
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.