3

即使把这个问题放在这里我也觉得很愚蠢,但我还没有找到解决方案。

也许这就是 onchange 事件应该如何工作,但似乎它触发得太快了(或者在做出最终选择时它应该再次触发)。我有一个选择/下拉菜单,用于刷新部分屏幕,但我发现在 Chrome 和 IE9 中,只要用户开始输入,就会调用 onchange 事件(鼠标选择可以正常工作) - 我想这是有道理的,因为即使他们没有完成输入,也会做出新的选择。无论如何,屏幕会更新,但不会更新下拉列表中用户最终选择的数据(就像它在第一次点击/更改时触发,但当用户停止输入并进行最终选择时它不会再次触发) .

我已将其切换为 onblur,但在用户完成选择并继续之前它不会被触发,所以我很想找到一个比 onblur 更快触发的解决方案,但在用户做出最终选择之后。

这是在 MVC 项目中的 aspx 页面上:

<asp:DropDownList ID="employeeDropdown" runat="server" onchange="RefreshCalendarData()" /> 

这是它调用的 js 函数:

function RefreshCalendarData() {
    // code omitted
    Scheduler.Refresh();
}

有没有使用 js 或 jQuery 的好的解决方案/变通方法?

4

2 回答 2

1

您可以在 ASP.NET MVC 项目中使用服务器控件(很少有例外)。键入时 DDL 在 IE/Chrome 中正常工作 - 请参阅我的博客 Cascading DropDownList in ASP.Net MVC使用 DropDownList 框和 jQuery 使用我的 Cascading DDL 示例。

于 2012-04-15T16:34:29.567 回答
0

是的,onChange 事件正在正常工作。您可以做的是将计时器附加到窗口并检查该字段是否已被修改,而不是使用 onChange。

因此,您可以创建一个全局变量,当用户模糊表单时更新为 true,还可以创建一个计时器来检查用户是否进行了最后一次选择。

if(userBlur == true && userSelect == true){
    //do the code
    window.clearInterval();
}else{
    //wait for change
}

应该更接近您的预期。

于 2012-04-15T16:16:53.150 回答