Javascript onclick()加载时自动触发,但随后失败

Javascript onclick()加载时自动触发,但随后失败,javascript,html,Javascript,Html,我知道html中带有括号的onclick()会自动调用。但在我的情况下,我希望将一个参数传递到onclick函数中(特别是单击的元素)。那么,当页面加载时,如何在不触发onclick的情况下管理它呢?此外,onclick方法在加载时自动触发后不会触发。我的代码如下: for (i = 0; i < returnPostPhotoSrcs().length; i++) { // var photosArray=returnPhotoNames() // var

我知道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)




    }
for(i=0;i//如果(i>0&&i函数是因为您正在调用它而激发的。您需要使用


除此之外,您还可以执行以下操作:

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

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

如其他人所示,您可以创建匿名函数,或者使用以下选项:


使用
returnPosthotosrcs()
在循环中检查性能似乎不是一个好主意,事实上您也在for循环中检查。将结果存储在循环外的一个变量中!因此,返回全局值的函数确实比直接访问全局值要昂贵得多?为什么它必须是全局值?每次循环时,它都在调用相同的东西返回相同的值。这是浪费时间。这就像每次需要拨打电话时都要查找电话号码一样。如果只记住值,速度会更快。你们能解释一下为什么我们必须用“函数”来包围函数吗
img.onmousedown= function(e) { playShout(e) };

//for playshout
playshout = function(e) {
    var element = e.target; //this contains the element that was clicked
};
innerSpan.onmousedown = playShout.bind(null, innerSpan);