Fra*_*eni 0 javascript domready
我对JavaScript很陌生.我试图将某些元素设置为相同的高度.除了在"addEvent"声明之外移动函数之外,我设法做了所有事情.
换句话说,此代码有效:
window.addEvent('domready', function() {
var elements = $$( 'div#leftcolumn div.module_menu' );
if( elements && elements.length > 1 ) {
var heights = [];
elements.each( function( el ) {
heights.push( el.getStyle('height').toInt() );
});
maxHeight = Math.max.apply( Math, heights ) + "px";
elements.each( function( el ) {
el.setStyle('height', maxHeight );
});
delete(heights);
}
}
);
Run Code Online (Sandbox Code Playgroud)
而这段代码不起作用:
function matchHeight( selector ) {
var elements = $$( selector );
if( elements && elements.length > 1 ) {
var heights = [];
elements.each( function( el ) {
heights.push( el.getStyle('height').toInt() );
});
maxHeight = Math.max.apply( Math, heights ) + "px";
elements.each( function( el ) {
el.setStyle('height', maxHeight );
});
delete(heights);
}
}
window.addEvent( 'domready', matchHeight( 'div#leftcolumn div.module_menu' ) );
Run Code Online (Sandbox Code Playgroud)
我已经用更简单的函数进行测试,它可以工作,例如:
window.addEvent('domready', function() { alert('test'); } )
Run Code Online (Sandbox Code Playgroud)
相当于
function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage())
Run Code Online (Sandbox Code Playgroud)
这是为什么?
这是因为你需要删除括号; 函数是一个对象,你需要传递函数,而不是它的返回值.所以,对于你的第一个例子,你应该:
window.addEvent('domready', function() { matchHeight('div#leftcolumn div.module_menu'); } );
Run Code Online (Sandbox Code Playgroud)
代替.对于你的第二个例子,它是:
function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage)
Run Code Online (Sandbox Code Playgroud)
再次,您传递对象giveMessage,而不是调用后获得的结果.