javascript函数传参数的问题

function SameH(i,j) {
alert(i);//i和j都传进来了啊
alert(j);

var a = document.getElementById(i);
var b = document.getElementById(j);

alert(a);
alert(b);

if (a.scrollHeight < b.scrollHeight) {
a.style.height = b.scrollHeight + "px";
}
else {
b.style.height = a.scrollHeight + "px";
}
}
window.onload = SameH("ldiv","rdiv");

我想用这个函数让左右两个div高度一样高,为什么 window.onload = SameH("ldiv","rdiv"); ,这里我传给 i 和 j
参数都成功了,html 里面也有这个两个 id 的 div ,但 var a 和 var b 为什么取不到元素,why?

为什么直接下面这样写,a 和 b 又能取到值?
(但是这样我一个页面只能比较两个div的高度,能传参数我可以方便的在一个页面比较多个div高度)

function SameH() {

var a = document.getElementById("ldiv");
var b = document.getElementById("rdiv");

if (a.scrollHeight < b.scrollHeight) {
a.style.height = b.scrollHeight+"px";
}
else {
b.style.height = a.scrollHeight+"px";
}
}

window.onload = SameH;

不要复制些jq的方法给我,我想知道上面代码是为什么..
<div id="ldiv" style="float:left;width:50%;height:200px;background:red">L</div>
<div id="rdiv" style="float:right;width:50%;background:blue">R</div>

function SameH(i,j) {
var a = document.getElementById(i);
var b = document.getElementById(j);
some code...
}

addLoadEvent(SameH("ldiv","rdiv"));

现在上面代码没问题了,参数能传了,就是div和js顺序的问题,js要在后面,但如果我js必须在div前面,有没办法检测下,读到dom再执行函数呢。

第1个回答  2013-11-11
如果你的"ldiv","rdiv"是在页面渲染完毕之后再加入DOM结构的话.....追问

ok,你对了,我js加载完还没读到div就先执行了。刚才缓存没刷新。

现在问题是,假设我必须得把这段js放这两个div里面执行,有没什么方法先不直接执行,而是先加载dom后再执行呢?谢谢

第2个回答  推荐于2016-03-24
window.onload它是触发事件,他会自动执行函数而不用自己去执行,所以不需要加括号,加了括号就自己执行了,所以你带参数的方法在文档还没加载完成就执行了所以找不到结点,你可以在方法内使用alert(document.readyState);来查看加载状态,我这边测试不带参数的是complete,带参数的都是loading或者interacting,如果要传递参数需要这样写
window.onload = function(){
SameH("ldiv","rdiv");
};
你也可以将代码 SameH("ldiv","rdiv");放到最后,这时候根本不需要window.onload事件了,因为文档加载是按顺序加载,放到最后肯定是能查到结点的
如果你需要检测dom是否加载完成需要使用document.onreadystatechange方法,使用方法你可以去百度,如果你用了JQUERY的话就很简单了,都封装好了本回答被提问者采纳
第3个回答  2013-11-11
var a = document.getElementById(i+"");你试下变字符串看看
相似回答