我正在计算文本字段中的单词,在一定数量的单词后,我使用防止默认值。在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,但Firefox并不喜欢它。
答案 0 :(得分:9)
我认为您遇到的问题是您没有找到删除密钥。 Preventdefault不会一起取消事件处理程序。但是,一旦您达到字段的最大长度,用户将无法删除任何字符,因为删除按键正在取消。
它在IE中工作的原因是因为IE不会为delete,end,enter,escape,function键,home,insert,pageUp / Down和tab激活keypress事件。在Safari中,按键事件中删除的密钥代码不正确。
出于这些原因,我有双重建议;首先,使用keydown事件,以便获得正确的密钥代码。
其次,查看密钥代码,如果是删除或退格,则不要阻止默认。
if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
return false;
} else {
return true;
}
答案 1 :(得分:8)
不应该
if maxwords
preventDefault
else
return true
诀窍?
答案 2 :(得分:4)
只需在eventHandler的末尾使用return true;
即可。这会将事件冒泡到浏览器中。
答案 3 :(得分:3)
看起来不像https://developer.mozilla.org/en/DOM/event,但你可以不叫它 ......
答案 4 :(得分:2)
$("#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();
});