Получить элемент, на котором была вызвана функция
Здравствуйте!
<input type="button" onclick="item.sendForm();" class="btn" value="Отправить" name="btn"> item - экземпляр класса Class1. Можно ли внутри функции sendForm получить элемент, на котором был вызван данный метод (в данном случае, button)? На чистом js или на jquery? |
Цитата:
<input type="button" onclick="item.sendForm(this);" class="btn" value="Отправить" name="btn"> function sendForm(obj) { alert(obj.value); }; |
<input type="button" onclick="item.sendForm(this);" class="btn" value="Отправить" name="btn"> |
А без передачи this никак не обойтись? Исходный html править очень муторно, много где встречается.
|
Можно обойтись.
<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> |
walik, в Firefox 3.6.3 вылетает "e is undefined"
|
И в правду undefined, я и не знал что в FF нельзя через window получить событие))
Тогда видимо и в правду остается вариант что бы передавать this |
напишите простой регекс по замене, соврременные IDE позваляют заменять во всем проекте одновременно.
|
Спасибо всем за помощь. Тема закрыта.
|
Цитата:
|
Цитата:
И вообще почему так сделано что нельзя получать событие через window ? |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
function(ev){
if(ev){var obj=ev.target;}//остальные else{var obj=event.srcElement;};//IE } В функцию передавать ни чего не надо. Вроде так. |
Самый изящный и удобный способ - делегирование:
<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> |
Albert.bikeev, ха ха, ну ты чудик. Если браузер поддерживает w3c метод addEventListener, то и событие будет передаваться в обработчик аргументом, как предписывает w3c. И для начала опробовал бы свой код. У NodeList нет метода addEventListener. Нужно обходить каждую кнопку и вешать обработчик.
И еще. А где тут делегирование? На какой элемент ты делегируешь обработку события нажатия по кнопке? Оборачивай код в соответствующие теги. |
Часовой пояс GMT +3, время: 10:28. |