onclick()在加载时自动触发但后来失败

时间:2014-12-31 04:33:18

标签: javascript html html5

我理解html中的onclick()会自动使用括号调用。但在我的情况下,我想将参数传递给onclick函数(具体来说,单击元素)。那么如何在没有在页面加载时触发onclick的情况下管理它呢?此外,onclick方法在加载后自动触发后不会触发。我的代码如下:

    for (i = 0; i < returnPostPhotoSrcs().length; i++)  {

//      var photosArray=returnPhotoNames()
//      var imgName=photosArray[i]

        var imgSrcArray=returnPostPhotoSrcs();
        var imgSrc=imgSrcArray[i]

        var postNamesArray=returnPostNamesArray();
        var postName=returnPostNamesArray[i]

        var img=img_create(imgSrc,postName,'')
        img.style.width=returnPostHeight();
        img.style.height=returnPostWidth();
        img.className="postImage";
        img.onmousedown=playShout(img);


        var postNamesArray=returnPostNames();
        var innerSpan = document.createElement('span');
       innerSpan.onmousedown=playShout(innerSpan); //problem line
        var text = postNamesArray[i];
        innerSpan.innerHTML = text; // clear existing, dont actually know what this does

        var outerSpan = document.createElement('span');
        outerSpan.className="text-content";
        outerSpan.onmousedown=playShout(outerSpan); //another problem line, also doesnt    call onclick


        var li = document.createElement('li');

        var imgSpacer=img_create('spacerSource',"spacer",'')
        imgSpacer.style.width="25px";
        imgSpacer.style.height=returnPostWidth();


        li.appendChild(img)
        outerSpan.appendChild(innerSpan)




        li.appendChild(imgSpacer)
        imgSpacer.style.opacity="0"






        // if (i>0 && i<returnPostPhotoSrcs().length-1) {
        //      hackey
        var imgSpacer=img_create('spacerSource',"spacer",'')
        imgSpacer.style.width="25px";
        imgSpacer.style.height=returnPostWidth();
        li.appendChild(imgSpacer)

        li.appendChild(outerSpan)

        imgSpacer.style.opacity="0"

//      }


        var outerDiv = document.getElementById("postDivOuter");
        outerDiv.appendChild(li)




    }

3 个答案:

答案 0 :(得分:0)

该函数会因为您正在调用它而触发。您需要使用closure

img.onmousedown= function() { playShout(img) };

答案 1 :(得分:0)

除此之外,您还可以这样做:

img.onmousedown= function(e) { playShout(e) };

//for playshout
playshout = function(e) {
    var element = e.target; //this contains the element that was clicked
};

答案 2 :(得分:0)

正如其他人所示,您可以创建一个匿名函数,或者另一个选项是使用.bind()

innerSpan.onmousedown = playShout.bind(null, innerSpan);