Есть ли противоположная функция preventDefault() в JavaScript?
Я считаю слова в текстовом поле и после определенного количества слов использую функцию предотвращения по умолчанию. В остальном я хотел бы снова включить команды по умолчанию.
Имеет ли 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 это не нравится.
Ответы
Ответ 1
Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что вы не ищете ключ удаления. Preventdefault не отменяет обработчик событий все вместе. Но с вашим кодом, когда вы нажмете максимальную длину своего поля, пользователь больше не сможет удалять любые символы, потому что отменяется нажатие клавиши.
Причина, по которой он работает в IE, заключается в том, что IE не запускает событие нажатия клавиши для удаления, завершения, ввода, выхода, функциональных клавиш, дома, вставки, страницыUp/Down и вкладки. В Safari ключевой код для удаления неверен в событии нажатия клавиши.
По этим причинам у меня двоякое предложение; сначала используйте событие keydown, чтобы получить правильные коды клавиш.
Во-вторых, посмотрите на код ключа, и если это удаление или обратное пространство, то не предотвратитеDefault.
if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
return false;
} else {
return true;
}
Ответ 2
Не стоит
if maxwords
preventDefault
else
return true
сделать трюк?
Ответ 3
просто используйте return true;
в конце вашего eventHandler. Это запустило бы событие в браузер.
Ответ 4
Не похоже, https://developer.mozilla.org/en/DOM/event, но вы просто не можете его называть...
Ответ 5
$("#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();
});