我在一个文本字段中计数字,并且在一定量的单词之后,我使用防止默认。在其他的,我想要重命名默认命令。
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上工作,但Firefox不喜欢它。
解决方法
我想你所遇到的问题是你不是在寻找删除键。 Preventdefault不会一起取消事件处理程序。但是,一旦您的代码达到您字段的最大长度,用户将无法再删除任何字符,因为删除按键被取消。
它在IE中工作的原因是因为IE不会触发删除,结束,输入,转义,功能键,home,insert,pageUp / Down和tab的按键事件。在Safari中,按键的删除键码在按键事件中不正确。
由于这些原因,我提出了双重建议;首先,使用keydown事件,以便获得正确的键码。
其次,看一下keycode,如果是delete或backspace,那么不要preventDefault。
if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) { return false; } else { return true; }