首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery中的更改顺序/按键/按键事件

jQuery中的更改顺序/按键/按键事件
EN

Stack Overflow用户
提问于 2010-08-13 01:28:54
回答 2查看 9.1K关注 0票数 10

我一直在调查浏览器之间的事件火灾顺序,因为我们的应用程序正在经历一些不寻常的行为。

我创建了一个小测试来查看三个事件的顺序: change、keydown和keypress。

下面是HTML (test.html):

代码语言:javascript
运行
复制
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
        <script src="test.js"></script>
    </head>
    <body>

        <input type="text" id="TextBox" />
        <input type="button" id="Button" value="Clear Results"/>

        <hr />

        <table id="ResultTable" style="width: 100px">
            <tr><th>Results</th></tr>
        </table>
    </body>

</html>

以下是JS (test.js):

代码语言:javascript
运行
复制
/*
    Appends event information to display table.
*/

$(document).ready(function() {
    $("#TextBox").change(function() {
        $("<tr><td>Change</td></tr>").appendTo("#ResultTable");
    });

    $("#TextBox").keydown(function() {
        $("<tr><td>Key down</td></tr>").appendTo("#ResultTable");
    });

    $("#TextBox").keypress(function() {
        $("<tr><td>Key press</td></tr>").appendTo("#ResultTable");
    });

    $("#Button").click(function() {
        $("#ResultTable").empty();
        $("<tr><th>Results</th></tr>").appendTo("#ResultTable");
    });
});

当我在文本框中键入字母f时,然后按enter,在Internet 8中得到以下内容:

结果

  • 键按
  • 键按
  • 更改
  • 键按

H 111键按H 212F 213

但是在Firefox (3.6.8)中,我得到了以下内容:

结果

  • 键按下
  • 键按
  • 键下

更改事件的顺序非常重要,因为我们在keydown事件中捕获enter键,但对更改事件进行一些验证。

我已经四处看过了,但还没能确定问题出在哪里。

这是预期的行为吗?所有浏览器是否应该按指定的顺序触发jQuery事件?还是我们应该删除所有关于事件触发顺序的假设?还是有什么别的东西妨碍了我的思考?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-14 02:07:07

我在网上找不到关于这个特定场景的任何细节,只是在浏览器的实现中,事件顺序是不应该被假定的。

这导致我删除了更改方法总是在onkeydown之后出现的假设,并且必须考虑到这一点来设计我的验证/提交过程。

基本上,我将把验证/提交移到一个方法中,并从这两个事件调用它,但要确保只使用一个标志调用它一次。

如果有人在这方面有任何额外的信息/建议,那就太好了。:)

票数 3
EN

Stack Overflow用户

发布于 2013-08-28 12:32:33

我知道这个问题很老,但最后我在与OP类似的情况下这样做了:

代码语言:javascript
运行
复制
$("#my_form").one("change keypress", ":input", ask_user_to_save_before_leaving);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3473256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档