Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить элемент, на котором была вызвана функция (https://javascript.ru/forum/misc/18186-poluchit-ehlement-na-kotorom-byla-vyzvana-funkciya.html)

barcelona 21.06.2011 11:32

Получить элемент, на котором была вызвана функция
 
Здравствуйте!
<input type="button" onclick="item.sendForm();" class="btn" value="Отправить" name="btn">

item - экземпляр класса Class1. Можно ли внутри функции sendForm получить элемент, на котором был вызван данный метод (в данном случае, button)? На чистом js или на jquery?

Маэстро 21.06.2011 11:52

Цитата:

Сообщение от barcelona (Сообщение 109705)
Можно ли внутри функции sendForm получить элемент, на котором был вызван данный метод?

Можно, если Вы передадите в качестве параметра this
<input type="button" onclick="item.sendForm(this);" class="btn" value="Отправить" name="btn">
function sendForm(obj)
{
alert(obj.value);
};

nikita.mmf 21.06.2011 11:52

<input type="button" onclick="item.sendForm(this);" class="btn" value="Отправить" name="btn">

barcelona 21.06.2011 12:33

А без передачи this никак не обойтись? Исходный html править очень муторно, много где встречается.

walik 21.06.2011 12:40

Можно обойтись.
<input type="button" id="btn" value="Click me" onclick="check();"/>
<script>
function check() {
	var e = window.event;
	var obj = e.target||e.srcElement;
	alert(obj.id);
}
</script>

barcelona 21.06.2011 12:51

walik, в Firefox 3.6.3 вылетает "e is undefined"

walik 21.06.2011 13:04

И в правду undefined, я и не знал что в FF нельзя через window получить событие))
Тогда видимо и в правду остается вариант что бы передавать this

nikita.mmf 21.06.2011 13:28

напишите простой регекс по замене, соврременные IDE позваляют заменять во всем проекте одновременно.

barcelona 21.06.2011 17:19

Спасибо всем за помощь. Тема закрыта.

monolithed 21.06.2011 18:07

Цитата:

Сообщение от walik
И в правду undefined, я и не знал что в FF нельзя через window получить событие))

не только в FF.

walik 21.06.2011 20:32

Цитата:

Сообщение от monolithed
не только в FF.

А где еще ?

И вообще почему так сделано что нельзя получать событие через window ?

Kolyaj 21.06.2011 21:19

Цитата:

Сообщение от walik
А где еще ?

Везде, кроме IE.

Цитата:

Сообщение от walik
И вообще почему так сделано что нельзя получать событие через window ?

А почему так сделано, что можно получать событие через window?

walik 21.06.2011 21:30

Цитата:

Сообщение от Kolyaj
Везде, кроме IE.

Не правда, у меня в хроме, сафари и опере еще работает, поэтому кстати и предложил этот вариант))

Цитата:

Сообщение от Kolyaj
А почему так сделано, что можно получать событие через window?

Ну наверное для тех кто не хочет передавать объект в качестве параметра, а предпочитает получать объект из window.

person 22.06.2011 06:45

function(ev){
if(ev){var obj=ev.target;}//остальные
else{var obj=event.srcElement;};//IE
}

В функцию передавать ни чего не надо.
Вроде так.

Albert.bikeev 06.07.2013 01:05

Самый изящный и удобный способ - делегирование:

<input type="button" id="send-btn" class="btn" value="Отправить" name="btn">

<script>
var btns = document.querySelectAll("input[type='button']");
btns.addEventListener("click", function(event){
// Кроссбраузерное получение таргета
var target = e && e.target || window.event.srcElement;

// target - поле на котором произошёл клик

});
</script>

danik.js 06.07.2013 03:44

Albert.bikeev, ха ха, ну ты чудик. Если браузер поддерживает w3c метод addEventListener, то и событие будет передаваться в обработчик аргументом, как предписывает w3c. И для начала опробовал бы свой код. У NodeList нет метода addEventListener. Нужно обходить каждую кнопку и вешать обработчик.
И еще. А где тут делегирование? На какой элемент ты делегируешь обработку события нажатия по кнопке?

Оборачивай код в соответствующие теги.


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