代码之家  ›  专栏  ›  技术社区  ›  Wilkins

在javascript中是否有preventdefault()的相反函数?

  •  20
  • Wilkins  · 技术社区  · 17 年前

    我在计算一个文本字段中的单词,在一定数量的单词之后,我使用prevent-default。在else中,我想重新启用默认命令。

    preventDefault()是否有相反的函数?

    以下是一些示例代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>preventDefault</title>
        <style type="text/css"></style>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
            <script type="text/javascript">
                $(function() {
                    var wordNum = 3;
                    var input_length;
                    $("#max").text("max word(s): " + wordNum);
                    $("#test").keypress(function(event) {
    
                        input_length = $.trim($(this).val())
                                .replace(/\s+/g, " ")
                                .split(' ').length;
    
                        if (input_length > (wordNum - 1)) {
                            event.preventDefault();
                        } else {
                            return true;
                        }
                    });
                });
    
            </script>
            </head>
            <body>
                <div id="max"></div>
                <textarea id="test" cols="20" rows="5"></textarea>
    </body>
    </html>
    

    它似乎可以在IE上运行,但火狐不喜欢它。

    5 回复  |  直到 13 年前
        1
  •  9
  •   Pickle    17 年前

    我认为你的问题是你没有在寻找删除键。PreventDefault不会一起取消事件处理程序。但是,一旦您的代码达到字段的最大长度,用户将无法再删除任何字符,因为删除键被取消。

    它在IE中工作的原因是IE不触发用于删除、结束、输入、转义、功能键、主页、插入、上下翻页和制表符的按键事件。在Safari中,用于删除的键代码在按键事件中不正确。

    出于这些原因,我有一个双重建议:首先,使用keydown事件代替,这样您就可以获得正确的密钥代码。

    第二,看一下键码,如果它是delete或backspace,那么不要阻止默认值。

    if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
        return false;
    } else {
        return true;
    }
    
        2
  •  8
  •   Les    17 年前

    不应该

    if maxwords
       preventDefault
    else
       return true
    

    耍把戏吗?

        3
  •  4
  •   Tzury Bar Yochay    17 年前

    简单使用 return true; 在事件处理程序的末尾。这将使事件在浏览器中冒泡。

        4
  •  3
  •   Kobi    17 年前

    看起来不像, https://developer.mozilla.org/en/DOM/event 但是你可以 不叫它 …

        5
  •  2
  •   Jon    16 年前
    $("#delete_button").click(function(e){
                var category = $("#category").val();
                var answer = confirm("Are you sure you would like to delete the " + category + " category?");
                if (!answer)
                    e.preventDefault();
            });