如何解雇window.onresize事件?

时间:2011-10-01 17:27:31

标签: javascript dom

我试图以编程方式触发窗口上的resize事件:

var evt = document.createEvent('HTMLEvents');
evt.initEvent('resize', true, false);
window.dispatchEvent(evt);

遗憾的是,这不起作用。我正在尝试让ExtJS库进行重新计算,它使用DOM Level 3事件,所以我不能只调用window.onresize();

3 个答案:

答案 0 :(得分:25)

您正在创建错误的事件。

调整大小是一个UIEvent,read the specs here

你需要这样做:

var evt = document.createEvent('UIEvents');
evt.initUIEvent('resize', true, false,window,0);
window.dispatchEvent(evt);

在此处查看此行动:http://jsfiddle.net/9hsBA/

答案 1 :(得分:3)

万一其他人需要这个,在Extjs 4.1中你可以做一些通常不优雅的事情......

    Ext.ComponentQuery.query('viewport')[0].doLayout();

视口不需要id - .query('viewport')部分正在使用视口的别名配置。

答案 2 :(得分:2)

如果createEvent可能会deprecated支持CustomEvent,那么使用CustomEvent API会有类似的代码段:

var ev = new CustomEvent('resize'); //instantiate the resize event
ev.initEvent('resize');

window.dispatchEvent(ev); // fire 'resize' event!