Javascript Can';在IE 7/8中使用parentNode获取DOM节点

Javascript Can';在IE 7/8中使用parentNode获取DOM节点,javascript,internet-explorer,internet-explorer-7,Javascript,Internet Explorer,Internet Explorer 7,我正在制作一个改编版的。我添加的新功能是左/上/宽/高输入框,以便您可以对热点位置/大小进行像素控制。我已经让它在FF和Chrome中运行良好,但我遇到的问题是在IE7/8中,它只是无法在更改时检索输入框的值 以下是发生问题的函数: function gui_dimension_change(e) { function changeAreaPos(areaNum, inputVal, cssAttrib, coordPos) { var coordsBox = document.getElem

我正在制作一个改编版的。我添加的新功能是左/上/宽/高输入框,以便您可以对热点位置/大小进行像素控制。我已经让它在FF和Chrome中运行良好,但我遇到的问题是在IE7/8中,它只是无法在更改时检索输入框的值

以下是发生问题的函数:

function gui_dimension_change(e) {

function changeAreaPos(areaNum, inputVal, cssAttrib, coordPos) {
var coordsBox = document.getElementsByClassName('img_coords')[areaNum],
    newCoordsVal = coordsBox.value.split(","),
    newWidth = "",
    newHeight = "",
    imCode = imcodeContainer.value,
    pattern = imCode.match(/\d+,\d+,\d+,\d+/g);

    myimgmap.areas[areaNum].style[cssAttrib] = inputVal;

    if (cssAttrib === "left" || cssAttrib === "top") {
        myimgmap.areas[areaNum].label.style[cssAttrib] = inputVal;
        newCoordsVal[coordPos] = inputVal;
    } else if (cssAttrib === "width") {
        myimgmap.areas[areaNum].width = inputVal;
        newWidth = parseInt(newCoordsVal[0]) + parseInt(inputVal);
        newCoordsVal[coordPos] = newWidth;
    } else if (cssAttrib === "height") {
        myimgmap.areas[areaNum].height = inputVal;
        newHeight = parseInt(newCoordsVal[1]) + parseInt(inputVal);
        newCoordsVal[coordPos] = newHeight;
    }

    newCoordsVal = newCoordsVal.join(",");
    myimgmap.areas[areaNum].lastInput = newCoordsVal;
    coordsBox.value = newCoordsVal;

    imCode = imCode.replace(pattern[areaNum], newCoordsVal);
    imcodeContainer.value = imCode;

};

    // alert(this);
    // alert(this.parentNode);
    // alert(this.parentNode.id);

var inputParent = this.parentNode,
    inputVal = this.value,
    whichBox = this.name,
    areaNum = inputParent.id.replace("img_area_", ""),
    imcodeContainer = document.getElementById('html_container');

switch(whichBox)
{
    case "img_left":
        changeAreaPos(areaNum, inputVal, "left", 0);
    break;
    case "img_top":
        changeAreaPos(areaNum, inputVal, "top", 1);
    break;
    case "img_width":
        changeAreaPos(areaNum, inputVal, "width", 2);
    break;
    case "img_height":
        changeAreaPos(areaNum, inputVal, "height", 3);
    break;
}

}
函数的调用方式如下:

myimgmap.addEvent(props[id].getElementsByTagName('input')[5], 'change', gui_dimension_change);
myimgmap.addEvent(props[id].getElementsByTagName('input')[6], 'change', gui_dimension_change);
myimgmap.addEvent(props[id].getElementsByTagName('input')[7], 'change', gui_dimension_change);
myimgmap.addEvent(props[id].getElementsByTagName('input')[8], 'change', gui_dimension_change);

因此,在更改事件中,我无法使用this.parentNode设置inputParent,也无法使用this.value获取输入框的值。适用于FF/Chrome,但不适用于IE 7/8,你知道为什么IE在parentNode和获取值方面存在问题吗?

好的,我找到了解决方案,以防有人关心。这都是因为IE处理事件目标的方式与其他浏览器不同,所以我做了以下工作:

var obj = (myimgmap.isMSIE) ? window.event.srcElement : e.currentTarget;
用obj代替了这个


愚蠢的IE

你能发布代码中更具体的部分吗?产生您所描述的bug的程序。相信我,很少有人会复制和添加引用的文件,然后进行测试,更不用说阅读了。