【发布时间】:2012-04-15 16:07:26
【问题描述】:
把这个问题放在这里我都觉得很愚蠢,但我还没有找到解决办法。
也许这就是 onchange 事件的工作方式,但它似乎触发得太早了(或者在做出最终选择时它应该再次触发)。我有一个选择/下拉菜单,用于刷新部分屏幕,但我发现在 Chrome 和 IE9 中,只要用户开始 typing 就会调用 onchange 事件(适用于鼠标选择) - 我认为这是有道理的,因为即使他们没有完成输入,也会做出新的选择。无论如何,屏幕会更新,但不会更新下拉列表中用户最终选择的数据(就像它在第一次点击/更改时触发,但当用户停止输入并进行最终选择时它不会再次触发) .
我已将其切换为 onblur,但在用户完成选择并继续之前它不会被触发,所以我很想找到一个比 onblur 更早触发的解决方案,但在用户做出最终选择之后.
这是在 MVC 项目中的 aspx 页面上:
<asp:DropDownList ID="employeeDropdown" runat="server" onchange="RefreshCalendarData()" />
这是它调用的js函数:
function RefreshCalendarData() {
// code omitted
Scheduler.Refresh();
}
有没有使用 js 或 jQuery 的好的解决方案/变通方法?
【问题讨论】:
-
ASP.NET 不使用 jQuery吗?另外,我没有看到这个问题(至少在 Chrome 中),
change事件不会为用户的最终下拉选择触发:jsfiddle.net/mattball/Mx7TN -
@MДΓΓБДLL - 我也用 jquery 试过这个。我仍然遇到了这个问题。您似乎是正确的,因为我无法用您的示例重复该问题,但我的列表包含大约 150 项 - 但我同意,这无关紧要,而且一旦做出最终选择,它似乎应该触发 - 也许它是第二次触发,但我的刷新过程需要足够长的时间以至于它不会再次被调用(或者它仍在执行所以调用被忽略)?感谢您的帮助。
-
可能最好的方法是不要对选择菜单使用onchange,并在选择旁边有一个小的“Go”按钮。 IE 也会为任何使用箭头键的选择导航触发 onchange,这可能是任何不使用鼠标的用户
-
嗯。如果
Scheduler.Refresh()需要很长时间执行,你应该考虑debouncing the call。我不确定 ASP.NET 是否有任何内置功能,但如果没有,则该插件可以解决问题。 -
有趣,这是我的答案之一
:P
标签: javascript jquery asp.net-mvc dom-events