Sign in to follow this  
tt48

Получение id элемента при клике

Recommended Posts

Доброго времени суток.

Задался целью оптимизировать код.

Нашел такую штуку:

window.captureEvents(Event.CLICK);

window.onclick = clicked;

function clicked(e) {}

Вот только она была описана в общем случае, а мне нужно как-то получить хотя бы id кликнутого эелемента..

В моём случае - делаю калькулятор и нужно узнать, по чему кликнул пользователь- если кнопка - послать по её названию обработку.

Заранее спасибо.

Share this post


Link to post
Share on other sites

var targ = (window.event) ? e.srcElement : e.target;

Ну вот так можно вроде бы получить элемент, на который кликнули.

Share this post


Link to post
Share on other sites

Еще неплохо бы сам event кроссбраузерно получить. Всегда делаю так:

function test(e) {
e = e || window.event;
var target = e.target || e.srcElement;
}

// а вот так делать не рекомендую:
window.onclick = test;

// лучше навесить на window слушатель (listener)
function addListener(obj, ev, func) {
if (document.addEventListener) {
obj.addEventListener(ev, func, false);
} else if (document.attachEvent) {
obj.attachEvent('on' + ev, func);
} else {
obj['on' + ev] = func;
}
}

addListener(window, 'click', function(e) {
test(e);
});

Share this post


Link to post
Share on other sites
// а вот так делать не рекомендую:

window.onclick = test;

// лучше навесить на window слушатель (listener)

Не всегда такое прокатит. У всех нормальных браузеров стек событий сделан FIFO, и только МС отличились, и сделали FILO.

Share this post


Link to post
Share on other sites

Ну это я так понимаю плохо только если стописят слушателей на одном объекте висит, а если пара-тройка то нормуль работает. И вообще я ни разу не попадал в ситуацию где у меня были бы с этим делом проблемы.

Не считая навешивания слушателя нескольким объектам в цикле... что-то там у меня было неладно кажись.

Share this post


Link to post
Share on other sites
Ну это я так понимаю плохо только если стописят слушателей на одном объекте висит, а если пара-тройка то нормуль работает. И вообще я ни разу не попадал в ситуацию где у меня были бы с этим делом проблемы.

Не считая навешивания слушателя нескольким объектам в цикле... что-то там у меня было неладно кажись.

FIFO - first in, first out. Первым попал в стек, первым вышел из стека.

FILO - first in, last out. Первым попал, последним вышел.

Проблемы наступают тогда, когда нужно выполнять разные действия поочередно, строго в определенной очередности.

Например, сперва пересортивать строки таблицы и потом уже сделать черезполосицу строк. Если делать наоборот, то результат будет ошибочный.

Share this post


Link to post
Share on other sites
FIFO - first in, first out. Первым попал в стек, первым вышел из стека.

FILO - first in, last out. Первым попал, последним вышел.

Проблемы наступают тогда, когда нужно выполнять разные действия поочередно, строго в определенной очередности.

Например, сперва пересортивать строки таблицы и потом уже сделать черезполосицу строк. Если делать наоборот, то результат будет ошибочный.

Спасибо за развёрнутое решение:-)

Share this post


Link to post
Share on other sites
FIFO - first in, first out. Первым попал в стек, первым вышел из стека.

FILO - first in, last out. Первым попал, последним вышел.

Просто дополнение: первый тип это по сути не стек, а очередь, а вот второй — стек.

Поэтому если нужно писать по-русски, то

FIFO — очередь

FILO (еще вариант LIFO — Last In First Out) — стек.

Share this post


Link to post
Share on other sites
Просто дополнение: первый тип это по сути не стек, а очередь, а вот второй — стек.

Поэтому если нужно писать по-русски, то

FIFO — очередь

FILO (еще вариант LIFO — Last In First Out) — стек.

еще более по-русски, LIFO - стопка.

Share this post


Link to post
Share on other sites
Просто дополнение: первый тип это по сути не стек, а очередь, а вот второй — стек.

Поэтому если нужно писать по-русски, то

FIFO — очередь

FILO (еще вариант LIFO — Last In First Out) — стек.

На его уровне не столь принципиально :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Member Statistics

    46,434
    Total Members
    3,128
    Most Online
    Sterben
    Newest Member
    Sterben
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Спрашивают сейчас

  • Пишут сейчас

    • Если свойства нет в спецификации, то откуда его возьмет браузер? Даже если в каком то одном из браузеров введут это свойство то смысла его использовать все-равно не будет, так как в остальных оно работать не будет 🙂   Тогда бардак творился, DHTML, разные объектные модели и все дела. У netscape действительно была такая фича. Хотя не факт что она работала. Вот тут https://www.uv.es/jordi/v3/html/dynhtml/dynamic.pdf можно увидеть что float:center; присутствует в коде, но следом написано что элементы можно выровнять с помощью float слева или справа, или с помощью js по центру. Также в книге указаны допустимые значения для float - left, right, none. Так что это скорее всего была запланированная возможность, которая не получила реализации.
    • Если бы с html и css, все браузеры строго соответствовали спецификациям) Да статье около десятка лет, а то и более. Вот я тоже склоняюсь к тому, что это ошибка. но эта лекция была написана даже с учётом ещё живого на тот момент netscape navigator. Может быть он позволял интерпретировать такую конструкцию. В описании автор указывает, что так блок становится обтекаемым с двух сторон.
    • Может с clear путаете? Или в статье спутали. Наверно, древняя?
      http://htmlbook.ru/css/clear
  • Popular Contributors