获取动态创建的DIV的ID在FireFox中不起作用

时间:2011-02-24 14:27:13

标签: javascript dynamic html onclick onmouseover

我已经尝试了一切来找到这个答案,现在是凌晨1点,我必须上床休息:(在我的妻子为我提供第二次离婚之前!:)

我的问题很简单就是这个,我使用google API来(localsearch,imagesearch和websearch)找到我合并到我网站的各种字符串。它们被加载到动态DIV中,每组结果都给出一个div,其中包含与其数字相关的整数。例如,

for (var i = 0; i < localSearch.results.length; i++) {

  // Create HTML elements for search results


  var letsseetitle = localSearch.results[i].titleNoFormatting;
    letsseestreet = localSearch.results[i].streetAddress;
    var letsseecity = localSearch.results[i].city;
    var letsseeregion = localSearch.results[i].region;
    var letsseecountr = localSearch.results[i].country;
    var letsseestaticmapurl = localSearch.results[i].staticMapUrl;
    var latresult = localSearch.results[i].lat;
    var lng = localSearch.results[i].lng;

     dv = document.createElement('div'); // create dynamically div tag
        var attrname = "selectionbox" + i;
            dv.setAttribute('id',attrname);       //give id to it
                var goFetchThis = letsseetitle + " " + letsseestreet + " " + letsseeregion + " " + letsseecountr;

                    dv.style.border="solid";    
                    dv.style.padding="10px";
                    dv.style.backgroundColor="#80C4FF";
                    dv.title="Click to review this company.";

                dv.innerHTML= letsseetitle + "<BR>" + letsseestreet + "<BR>" + letsseecity + "<BR>" + letsseeregion + "<BR>"  + letsseecountr + "<BR>";

                //var el = document.getElementById(attrname);
                    LoopIn = i; 

                    // attach event onmouseclick to the created div tag
                if(isIE){
                    dv.onclick = new Function("SelectThis(attrname, attrname)");
                        }
                else{
                        dv.setAttribute("onclick", "SelectThis()");
                            }
                    document.getElementById("foundresultsdiv").appendChild( dv );









        }

现在的问题是这个。在chrome,即safari和其他版本中,我对点击组件没有任何问题。 IE,当用户点击其中一个动态创建的div时,我的脚本会删除内容并将其加载到表单中,供用户提交。

执行此操作的脚本如下;

function SelectThis(e) {
var targ;






    if (!e) var e = window.event;

        if (!e) var e = elTags[e].getAttribute("name");
                if (e.target) targ = e.target;
                    else if (e.srcElement) targ = e.srcElement;

    if (!e) var e = window.event;
    if (e.target) targ = e.target;

    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
            targ = targ.parentNode;
                theId=targ.id



var TheStuffInside = document.getElementById(theId).innerHTML;
var linebyline = TheStuffInside.split("<br>");


var searchname = document.getElementById('searchname')
    searchname.value = linebyline[0];

var stAddress = document.getElementById('stadd')
    stAddress.value = linebyline[1];

var suburb = document.getElementById('suburb')
    suburb.value = linebyline[2];

var stateLocal = document.getElementById('statelocal')
    stateLocal.value = linebyline[3];

var country = document.getElementById('country')
    country.value = linebyline[4];

}

现在我不能吹嘘这里,因为我根本没有写这个脚本,而且主要是它运作良好。在Firefox中除外。当我点击firefox中的一个动态div时,一切都会发生。实际上,该元素返回一个未定义的结果。我已经尝试了很多变化,从更改代码到添加事件监听器,我都没有运气。

这里的任何建议都将非常感谢。谁知道 - 你甚至可以挽救我的婚姻!:)

顺便说一下,//击败safari bug在技术上是不正确的,但我没写好! :)

有任何问题,请告诉我。

2 个答案:

答案 0 :(得分:2)

使用JSLint检查您的代码。有很多错误。

答案 1 :(得分:1)

问题可能是您尝试访问的DIV在页面加载时不存在于DOM中。 JQuery live解决了这个问题。所以我会从那里开始。