Определение элемента на который кликнули мышой

rotoZOOM

ACM maniac
Определение элемента на который кликнули мышой

Сначала пользовался этим:
PHP:
document.elementFromPoint (window.event.clientX,window.event.clientY);
Но это поддерживается только IE. Хотелось бы аналог, который поддерживался бы W3C.
Может есть другой выход ? Суть вопроса:
JavaScript'ом создаю ячейки таблицы. Каждой ячейке генерю свой уникальный id. Хотелось бы отследить события кликанья на ячейки.
Пробовал так:
PHP:
var obj=rowEl.insertCell(i);
obj.onclick="j_myfunc("+i+","+j+")";   // ошибка JavaScript
obj.onclick=new j_myfunc(i,j);   // сразу вызывается функция ... лажа полная
// i,j = координаты ячейки ... необходимы для определения id
Заранее спасибо.
 

diamond_krnl

pure-php
не проще ли перебрать все ячейки и поставить свой обработчик на onclick?
вроде
PHP:
t = document.getElementById('tableid');
for(var i=1; i < t.rows.length; i++)
{
  for(var j=0; j < t.rows(i).cells.length; j++)
  {
    t.rows(i).onclick = function () { ... }
  }
}
 

rotoZOOM

ACM maniac
написал так:
PHP:
    var mobj=document.getElementById ("ttt");
    if (mobj.firstNode)mobj=mobj.firstNode;
    for (var i=0;i<2;i++){
        var _a=mobj.insertRow(i);
        _a.style.height=th/maxY;
        for (var j=0;j<4;j++){
            var _b=_a.insertCell(j);
            _b.style.width=tw/maxX;
            _b.id="__row"+i+"col"+j;
            _b.onclick=function () {j_CellClick(i,j);}
        }
    }
При вызове функции j_CellClick постоянно передаются последние значения i и j, то есть 2 и 4.

-~{}~ 03.11.05 15:20:

Profic я тут смотрю, думаю этому тоже можно верить, тем более, что так и есть.
http://www.w3schools.com/htmldom/dom_obj_event.asp
 

Profic

just Profic (PHP5 BetaTeam)
А я бы там не смотрел. Ибо там нет оперы, и судя по той табличке ff вообще не поддерживает этот объект, но это же полная чушь.
 

rotoZOOM

ACM maniac
Всем спасибо, проблему решил, если кому интересно, то вот:
PHP:
            .........
            // регистрация события для каждой ячейки
            _b.onclick = j_ClickDynamic;
            if (_b.captureEvents)_b.captureEvents(event.CLICK);
            ..........

    // сама функция обработки события
    function j_ClickDynamic(e)
    {
        if (!e)var e=window.event;
        var obj=this;

/**** либо можно и так ****
        if (e.target) obj = e.target;
        else if (e.srcElement) obj = e.srcElement;
        if (obj.nodeType == 3) // спеицально против бага Safari
            obj = obj.parentNode;
******************************************/
         // теперь obj и есть тот самый нужный объект
    }
проверил IE и FF, работает, думаю будет и на других браузерах тоже.
 

akxxiv

Новичок
Я делал так
PHP:
var cells = document.getElementById('tableid').getElementsByTagName('td')
for(var i=0; i<cells.length; i++)
{
    cells[i].onclick = function()
    {
         j_myfunc(this.id)
     }
}
 

DeadMorozBLR

Новичок
Зачем плодить обработчик события, вешая его на каждую ячейку? В O'Reilly - JavaScript And DHTML Cookbook 2003 используется такая конструкция:
Код:
var elem = (evt.target) ? evt.target : ((evt.srcElement) ?  evt.srcElement : null);
Можно, используя особенности синтаксиса JavaScript, записать короче:
Код:
var elem = evt.target || evt.srcElement || null;
 
Сверху