【发布时间】:2014-09-25 17:55:15
【问题描述】:
我有一个带有两个下拉菜单的网页。第一个 (id = ddlIndustry) 有一个“开始”按钮,在从下拉列表中选择一个选项后刷新页面。完成此操作后,可以在第二个下拉列表 (id = region) 中进行选择。这有一个 onchange 属性,当做出选择时会触发并刷新页面。
我正在尝试用 Javascript 编写一组命令,从第一个下拉列表中选择一个选项,单击“开始”按钮,刷新页面后,从第二个下拉列表中选择一个选项并以编程方式触发 onchange事件。
我目前的代码是:
document.all.ddlIndustry.selectedIndex = 21;
document.getElementById("cmdChart").click();
window.onload = function(){
document.all.region.selectedIndex = 2;
document.all.region.onchange();
};
这让我可以选择ddlIindustry 索引并按“Go”,但不会选择区域并触发onchange 事件。但是,当我选择一个行业并手动按 go 时,代码的第二部分:
document.all.region.selectedIndex = 2;
document.all.region.onchange();
允许我选择一个区域并触发 onchange 事件。
我怎样才能同时做这两件事?
编辑:我在 Chrome(版本 37.0.2062.120 m)和 IE(版本 11.0.9600.17280)中都试过这个
【问题讨论】:
-
Documentation of
document.all表示不再受支持。链接到 MSDN 而不是 MDN 的原因是,document.all仅在 IE 中支持 。此外,onchange不能以编程方式触发。你能做的,就是直接调用事件处理函数。 -
我遇到的问题是我可以使用 - document.all.region.selectedIndex = 2; 以编程方式触发 onchange; document.all.region.onchange(); - 这在我自己执行时有效,但我无法让它在 window.onload = function(){} 内工作。
-
document.all似乎适用于所有现代浏览器(也在 IE11 中),显然我错过了一些东西。实际上.onchange()不会触发onchange事件,它是在设置.onchange = function(){..}时直接调用处理程序。无论如何,window.onload上的代码 works 也是如此。唯一的区别是,我在onload处理程序中附加了onchange侦听器。作为结论,我想说,window.onload,或者至少是帖子中的行,永远不会被执行。代码中是否存在多个window.onload = ...赋值? -
不,这是完整的代码。我从 Chrome 或 IE 控制台一次运行所有这些。
-
呃...就是这样,
window.onload在您将代码写入控制台之前已经触发了很长时间。正如我在之前的评论中所说,它没有被执行。
标签: javascript onchange onload