function Init(id) {
    txtcorpname = document.getElementById("name");
    dataShow = document.getElementById("dataShow");
    var p = getAbsPoint(name);
    dataShow.style.left = p.x + 'px';
    dataShow.style.top = p.y + name.offsetHeight + 'px';
    name.onclick = dataShow.onclick = function (e) {
        e = e || event;
        var t = e.target || e.srcElement        if (t.tagName.toLowerCase() == 'li') {
            name.type = 'text'; //为元素指定类型
            name.value = t.innerHTML.replace(/<.+?>/gim, '').replace(/^\s+|\s+$/g, "");
dataShow.style.display = "none";
              return;
        }
        if (e && e.stopPropagation) {
            //W3C取消冒泡事件
            e.stopPropagation();
        } else {
            //IE取消冒泡事件
            window.event.cancelBubble = true;
        }
    };
    document.body.onclick = function (e) {
        dataShow.style.display = "none";
    };
};
function getSearchKeys() {    var s =  name.value;
    if (s == '') {
        dataShow.style.display = "none";
        return;
    }
    var arr = ['<ul>'];
    for (var i = 0; i < keys.length; i++) {
        if (keys[i].indexOf(s) >= 0) {
            arr.push('<li>' + keys[i] + '</li>');
        }
    }    if (arr.length > 1) {
        arr.push('</ul>');
        dataShow.innerHTML = arr.join('');
        dataShow.style.display = "block";
    } else {
        dataShow.style.display = "none";
    }
}上述代码在其它ie版本和Mozilla Firefox都没有问题,但是在ie8种出错,指向dataShow.innerHTML = arr.join('');这一句。
怎么办?

解决方案 »

  1.   

    dataShow = document.getElementById("dataShow");变量名称和id名称最好不要采用相同的名称,一般是这个导致的。你可以改成dataShow = document.getElementById("dataShowXX");
    <div id="dataShowXX"
      

  2.   

    <div id="dataShow"></div><script>
    var dataShow = document.getElementById("dataShow");var arr = ['<ul>'];
    arr.push('<li>' +'5' + '</li>');
    arr.push('</ul>');
    dataShow.innerHTML=arr.join('');
    </script>ie8下测试通过。
      

  3.   

    var  dataShow = document.getElementById("dataShow");
    前面加个var
      

  4.   

    已经加了var,报错:htmlfile:未知的运行时错误
      

  5.   

    <div id="dataShow"></div><script>
    var dataShow = document.getElementById("dataShow");var arr = ['<ul>'];
    arr.push('<li>' +'5' + '</li>');
    arr.push('</ul>');
    dataShow.innerHTML=arr.join('');
    </script>单独测这个能通过吗?
    其他类似的也加var了吗?
      

  6.   


    这段我测试过了,在我的机器上ie8也能通过
    附上全部代码:
        var xmlHttp = false;
    try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e2) {
            xmlHttp = false;
        }
    }
    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
        xmlHttp = new XMLHttpRequest();
    }
    //以下为企业名称取值
    var myname;
    var dataShow;function callServer(id) {
        Init(id);
        var url = "getcorp.aspx?myname=" + escape(myname.value);
        xmlHttp.open("get", url, true);  //建立新请求
        xmlHttp.onreadystatechange = updatePage;  //指定回调方法
        xmlHttp.send(null);
    }var keys = new Array();
    function updatePage() {    if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                keys = xmlHttp.responseText.split(','); //ajax返回的数据
                getSearchKeys();
            }
        }
    }
    function Init(id) {
        myname = document.getElementById("myname");
        dataShow = document.getElementById("dataShow");
        var p = getAbsPoint(myname);
        dataShow.style.left = p.x + 'px';
        dataShow.style.top = p.y + myname.offsetHeight + 'px';
        myname.onclick = dataShow.onclick = function (e) {
            e = e || event;
            var t = e.target || e.srcElement        if (t.tagName.toLowerCase() == 'li') {
                myname.type = 'text'; //为元素指定类型
                myname.value = t.innerHTML.replace(/<.+?>/gim, '').replace(/^\s+|\s+$/g, ""); //为元素添加值可用innerHTML.replace(/<.+?>/gim,'')去除标签,用replace(/^\s+|\s+$/g,"")去空格
                dataShow.style.display = "none";
                WritedataText()
                return;
            }
            if (e && e.stopPropagation) {
                //W3C取消冒泡事件
                e.stopPropagation();
            } else {
                //IE取消冒泡事件
                window.event.cancelBubble = true;
            }
        };
        document.body.onclick = function (e) {
            dataShow.style.display = "none";
        };
    };
    function getSearchKeys() {    var s = myname.value;
        if (s == '') {
            dataShow.style.display = "none";
            return;
        }
        var arr = ['<ul>'];
        for (var i = 0; i < keys.length; i++) {
            if (keys[i].indexOf(s) >= 0) {
                arr.push('<li>' + keys[i] + '</li>');
            }
        }    if (arr.length > 1) {
            arr.push('</ul>');
            dataShow.innerHTML = arr.join('');
            dataShow.style.display = "block";
        } else {
            dataShow.style.display = "none";
        }
    }function getAbsPoint(e) {
        var x = e.offsetLeft;
        var y = e.offsetTop;
        while (e = e.offsetParent) {
            x += e.offsetLeft;
            y += e.offsetTop;
        }
        return { "x": x, "y": y };
    }
      

  7.   

    function getSearchKeys
    中是不是要重新取啊
    加上 myname = document.getElementById("myname");
      dataShow = document.getElementById("dataShow");
    最好变量和ID严格区分开来,别给自己找麻烦
      

  8.   

    用jquery能解决吗?该怎么改呢?
      

  9.   

    呵呵,自己解决了。把div放在form外面就行了。谢谢上面的各位!