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