假设我将javascript“change”事件处理程序附加到select元素,这是调度ajax请求从服务器加载一些东西的东西。
这在Firefox中很好用。但是,在IE中,每次使用鼠标滚轮快速滚动组合框选项时,都会触发更改事件。这很麻烦,因为它会向服务器发送请求,并且无法保证请求以正确的顺序返回,因此客户端状态可能会变得不一致。
现在,我们之前的解决方法是,我们会向更改处理程序引入超时,以便在实际调度请求之前等待几分之一秒。如果在那么短的时间内,另一个更改事件进入,我们取消之前的超时并开始新的超时,从而防止发送多个请求的垃圾邮件。
现在,虽然这似乎有效,但它有点hackish,我想知道是否有更好的方法。是否有我们可以挂钩的不同事件,以便在使用鼠标滚动时不会反复触发?或者我们应该完全禁用鼠标滚轮(onmousewheel =“return false;”)? Firefox似乎不支持通过组合框鼠标滚动,但我不确定禁用鼠标滚动是否是一个严重的可用性禁忌或其他。
有人可以推荐其他解决方案吗?
答案 0 :(得分:1)
我还没有真正尝试过这个(除了一些测试来回答这个问题),但也许你可以使用onblur
事件让它工作。并且可能保留onchange
事件以了解onblur
事件处理程序是否应该触发Ajax请求。
答案 1 :(得分:1)
这有点骇人听闻,当然,但这是我发现的最佳解决方案。我使用该模式来解决几个不同的问题,包括服务器请求,自动保存用户文本条目,自动完成文本条目,拼写检查等。这是确定用户交互暂停的好方法。摘要“onPause”函数的逻辑,它看起来不那么hacky:D
答案 2 :(得分:0)
你必须在ajax请求中发送当前选项值,现在如果你在ajax响应中返回这个值,你可以检查当前选择的选项是否与响应返回的相同然后使用它,否则在此期间选择已经改变,等待其他回应!