0

下面列出的是我的 javascript 函数。该功能在 IE 上运行良好,但由于包含 window.event 部分而无法在 Firefox 上运行。要做到这一点,它可以在 IE 以外的其他浏览器中工作的方法是在函数头的参数列表中使用参数 e(或其他未定义的东西)。如果已经有另一个参数,如何将事件添加到参数中?下面还列出了从应用程序到函数的示例调用。再次感谢。

function entityclick(where) {
    try {
        var tempstring = new String(window.event.srcElement.id)
    }
    catch (oExp) {
        var tempstring = new String("noclickyclicky")
    }
    tempstring = tempstring.substr(0, 3)
    if (tempstring != "img") {
        if (selectedentity != "") {
            try {
                document.getElementById('tbl' + selectedentity).style.backgroundColor = ""
            }
            catch (oExc) {
            }
        }
        selectedentity = where.EntityID + where.EntityCat;
        var EntityID = where.EntityID
        var EntityCat = where.EntityCat
        var ParentEntityID = where.ParentEntityID
        var ParentEntityCat = where.ParentEntityCat
        var projtype = 0
        document.getElementById('tbl' + selectedentity).style.backgroundColor = "lightsteelblue"
        //document.all('tbl'+selectedentity).className = "HighlightMe"
        ifram = document.getElementById('detailframe')
        if (0 == 0) {
            if (EntityCat == 35)
                ifram.src = "../teams/Viewteam.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat + "&taskgrptype=" + GLOBALTASKGRPTYPE;
            else if (EntityCat == 26)
                ifram.src = "../teams/Viewteam.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat + "&taskgrptype=" + GLOBALTASKGRPTYPE;
            else if (EntityCat == 34)
                ifram.src = "../teams/Viewteam.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat + "&taskgrptype=" + GLOBALTASKGRPTYPE;
            else if (EntityCat == 10)
                ifram.src = "../solutions/ViewSolution.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat + "&taskgrptype=" + GLOBALTASKGRPTYPE;
            else if (EntityCat == 11)
                ifram.src = "../observations/ViewObservation.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat;
            else if (EntityCat == 12)
                ifram.src = "../actions/ViewAction.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat;
            else if (EntityCat == 13)
                ifram.src = "../tasks/ViewTask.aspx?taskgrpid=" + EntityID + "&taskgrpcategory=" + EntityCat + "&ptaskgrpid=" + ParentEntityID + "&ptaskgrpcategory=" + ParentEntityCat;
            ifram.style.left = '27%'
            ifram.style.display = 'block'
            //detail.style.display = 'none'
            ifram.style.zIndex = 5
        }
    }
}

这是对函数的调用

entityclick(document.getElementById('tbl' + glbRefreshID + glbRefreshCAT))

编辑:在某些地方也以其他方式调用 entityclick,例如

entityclick(this)

或者

entityclick(document.getElementById('tbl' + GlobalExplodeID + GlobalExplodeCat))
4

2 回答 2

0

使用额外的函数作为事件处理程序。例如

function handler(e) {
    if (!e)
        e = window.event;
    entityclick(e.target, e); // have more than one parameter in your fn
}
var elem = document.getElementById("xyz");
if (elem.addEventHandler)
    elem.addEventHanlder("click", handler, false);
else
    elem.attachEvent("onclick", handler);

function entityclick(elem, e) {
/* get: a DOM node with special properties[, an Event object] */
     if (e)
          // we handle something
     else
          // we have to use defaults
}
于 2012-05-01T15:53:33.300 回答
0

能够使用这篇文章的提示来解决

http://www.sitepoint.com/forums/showthread.php?330837-window-event-is-not-working-in-Firefox

可以将事件和 this 传递给同一个函数,这样我仍然可以得到我需要的每一个项目。感谢所有查看/帮助的人。

于 2012-05-02T14:44:37.967 回答