【问题标题】:Triggering an onchange event within an onload function在 onload 函数中触发 onchange 事件
【发布时间】: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


【解决方案1】:

我认为,如果你写下面给出的东西会起作用。

region.selectedIndex = 2;
region.onchange();

【讨论】:

  • 同样,它本身可以正常工作,但不能在 window.onload = function(){ } 内。当我有带有 onload 函数的 region.selectedIndex 和 region.onchange 语句时,总是选择零索引而不是我选择的索引值(这里是 2)。
【解决方案2】:

你也可以试试这个:

var body_Onload = function(){
    document.all.region.selectedIndex = 2;
    document.all.region.onchange();
};

在 HTML 中将此函数添加到正文标记为

<body onLoad="body_Onload">
...
...
</body>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多