OnChange事件在下拉/选择输入中过早触发?

时间:2012-04-15 16:07:27

标签: javascript jquery asp.net-mvc javascript-events

我甚至在这里提出这个问题我觉得很愚蠢,但我还没有找到解决方案。

也许这就是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有什么好的解决方案/解决方法吗?

2 个答案:

答案 0 :(得分:1)

您可以在ASP.NET MVC项目中使用服务器控件(极少数例外)。键入时,DDL在IE / Chrome中正常工作 - 请参阅My blog Cascading DropDownList in ASP.Net MVCWorking with the DropDownList Box and jQuery 玩我的Cascading DDL样本。

答案 1 :(得分:-1)

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

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

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

应该更接近你的期望。