0

我有一些旧代码正在更新以在 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() 以便我可以做互联网上建议的事情,以及下面的答案。

谢谢。

4

1 回答 1

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
}
于 2012-09-17T14:36:19.427 回答