firefox中的event.srcElement

时间:2012-09-17 14:05:22

标签: javascript internet-explorer firefox

我有一些旧的代码,我正在更新以在firefox中工作,我遇到了一个问题。

在代码中,有一个如下所示的函数:

function tableEnter() {

     myLocation = event.srcElement;

}

这在firefox中不起作用。我对此进行了相当多的研究,但是我发现的大多数解决方案都需要将一个事件传递给该函数,然后对传递的e参数进行操作。 ...不幸的是,在我正在更新的代码中,我没有传递任何参数。

使event.srcElemet在firefox中工作的解决方案是什么,没有任何参数传递给我的函数?

编辑:

好的,问题是:如何将事件对象传递给tableEnter()函数?

这是代码目前正在做的事情:

$(document).ready(function () {
    //make table rows
    //for every new table row...
    myRow.onmouseover = tableEnter; (this is probably a bad name. it should be like..rowEnter. But this is the way I found the code)
});

现在的问题是,我如何将事件对象传递给tableEnter(),以便我可以在互联网上做的事情以及下面的答案。

感谢。

1 个答案:

答案 0 :(得分:2)

老实说,我不明白为什么你想要访问事件对象,而不是你的处理程序的参数。但是,嘿,那只是我。虽然没有指定参数,但FF和chrome只是随心所欲,并将事件对象传递给处理程序。所以:

function tableEnter()
{
    var evt = window.event || arguments[0];
    var src = evt.target || evt.srcElement;
}

就是这样。就个人而言,我建议你做整个网络正在做的事情:

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

由于您使用的是FF,因此不应过多地偏离任何编码约定或标准,无论它们是多么模糊。至少它比没有标准或约定更好


鉴于您的更新,只需将您的功能定义更改为:

function tableEnter(e)
{
    //though in jQuery, I suspect e is allready X-browser-proof
    e = e || window.event;
    //just leave ^^this^^ line out, and check in IE: alert(typeof e);
    //if it alerts object, jQuery passed the event object for you
    var theRow = this;//<-- this points to the row that triggered the mouseover
    var jQRow = $(this);//gives you access to jQuery methods

    var target = e.target || e.srcElement;//<-- mainly of importance in delegation
}