#javascript #jquery
#javascript #jquery
Вопрос:
Я использую jQuery для создания калькулятора. Проблема в том, что при нажатии клавиши я вызываю функцию calculate, которая вычисляет и возвращает значение. Однако, если я изменю значение в текстовом поле и снова нажму keydown, страница обновится, и все будет пустым.
Я не хочу, чтобы страница обновлялась, если пользователь изменяет значение в текстовом поле. Он должен снова вызвать функцию calculate и вернуть и отобразить новый результат.
Это код:
lgpm.keydown(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13'){
if (formValidate()){
event.preventDefault();
return false;
}
else {
calculateMet();
}
}
event.stopPropagation();
});
Комментарии:
1. Как выглядит ваш HTML (включая
<form
> тег)?
Ответ №1:
event.preventDefault()
Метод должен вызываться всякий раз, когда нажата клавиша enter — иначе он отправит форму — попробуйте это
lgpm.keydown(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13'){
event.preventDefault();
if (formValidate()){
return false;
}
else {
calculateMet();
}
}
event.stopPropagation();
});
Комментарии:
1. Этот код не сработал. Это не обновляет страницу, но и не вызывает функцию calculate при нажатии клавиши во второй раз.
2. Хорошо, я только что понял, что это работает. Но оно принимает только новое значение текстового поля, которое вводится с помощью нажатия клавиши / нажатия клавиши [это последнее текстовое поле формы, которую вводит пользователь]. ЕСЛИ я изменю значение других текстовых полей, а затем нажму keydown в последнем текстовом поле, функция calculate не вызывается, т.Е. Я предполагаю, что новые значения текстового поля не извлекаются.
3. Можете ли вы опубликовать свой полный код на JSFiddle.net возможно ? Это значительно упростит отладку… Почему у вас там есть метод stopPropagation ?
4. Вот код на jsFiddle: jsfiddle.net/Ak4qn Я не уверен, почему javascript там не работает.
5. @fuz3d У вас там было довольно много ошибок… я обновил его …. jsfiddle.net/Ak4qn/1
Ответ №2:
попробуйте добавить event.stopPropagation() после event.preventDefault()
Ответ №3:
Измените свое тело на:
if(keycode == '13'){
if (formValidate()){
event.preventDefault();
} else {
calculateGravelMetric();
}
}
return false;
… таким образом, обработка по умолчанию всегда будет предотвращена