为什么单独定义的函数不适用于;“多姆雷迪”;JavaScript中的事件?
我对JavaScript还很陌生。我试图给一些元素设置相同的高度。除了将函数移到“addEvent”声明之外,我设法做了所有的事情 换言之,此代码适用于:为什么单独定义的函数不适用于;“多姆雷迪”;JavaScript中的事件?,javascript,domready,Javascript,Domready,我对JavaScript还很陌生。我试图给一些元素设置相同的高度。除了将函数移到“addEvent”声明之外,我设法做了所有的事情 换言之,此代码适用于: window.addEvent('domready', function() { var elements = $$( 'div#leftcolumn div.module_menu' ); if( elements && elements.length > 1 ) { var
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);
}
}
);
虽然此代码不起作用:
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' ) );
我已经用更简单的函数进行了测试,它可以工作,例如:
window.addEvent('domready', function() { alert('test'); } )
相当于
function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage())
这是为什么?你忘记把你的
匹配高度
通话结束了。将最后一行更改为:
window.addEvent( 'domready', function(){matchHeight( 'div#leftcolumn div.module_menu' )} );
因为你需要去掉括号;函数是一个对象,您需要传递函数,而不是它的返回值。因此,对于第一个示例,您应该:
window.addEvent('domready', function() { matchHeight('div#leftcolumn div.module_menu'); } );
相反。第二个例子是:
function giveMessage() { alert('test'); }
window.addEvent( 'domready', giveMessage)
同样,您传递的是对象
giveMessage
,而不是调用该对象后获得的结果。K因此该链接正在查找指向该函数的指针。当你传递一个匿名函数(如#1)时,该函数被创建/存储在内存中,并且该位置被传入。但是,在第二种情况下,JS执行函数(因为您的括号+参数),然后将结果作为指针传递。。。这不是你想要的
您需要做的是:
function setup() {
matchHeight( 'div#leftcolumn div.module_menu');
}
window.addEvent('domready',setup);
或者仍然使用匿名函数:
window.addEvent('domready',
function() {matchHeight( 'div#leftcolumn div.module_menu');});
FWIW窗口。addEvent
不完全兼容跨浏览器,另请参见