2015-08-26 5 views
1

Вот код для функции нажатия клавиши, которая позволяет только номер http://jsfiddle.net/lesson8/HkEuf/1/JQuery нажатия клавиши() события не работают KeyUp()

Но для одних и тех же кодов клавиша, KeyUp функция не работает. Я имею в виду, если я использую

$(document).ready(function() { 
    //called when key is pressed in textbox 
    $("#quantity").keyup(function (e) { 
    //if the letter is not digit then display error and don't type anything 
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
     //display error message 
     $("#errmsg").html("Digits Only").show().fadeOut("slow"); 
       return false; 
    } 
    }); 
}); 

Причина использования keyup заключается в том, чтобы получить текущее введенное значение в текстовое поле. Если я использую функцию keyup, я получу текущее значение. Но, если я использую keydown или keypress, я получаю предыдущее или существующее значение в текстовом поле см. Обновленный код с различными функциями. http://jsfiddle.net/dgireeshraju/HkEuf/7300/ это пример с keydown, который дает существующее значение.

+3

почему вы хотите использовать KeyUp не нажатие -> использовать KeyDown вместо –

+0

использовать .keydown(), если вы все еще хотите использовать keypress, я думаю, вам нужно будет очистить значение перед возвратом false; – semuzaboi

ответ

1

Ключ срабатывает, когда пользователь отпускает ключ после выполнения действия по умолчанию этого ключа>.

Keypress срабатывает при вводе фактического символа в качестве, например, текстового ввода. Он повторяется, пока пользователь удерживает нажатой клавишу.

Your code is actaully working in both the cases (you can see the error message atleast) но так как это событие отличается, то есть результат. Для того, чтобы заставить его работать с keyup вам нужно очистить входной элемент снова, так как к тому времени значение уже введено в элементе ввода

$("#quantity").keyup(function (e) { 
    //if the letter is not digit then display error and don't type anything 
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
     //display error message 
     $(this).val(''); //<--- this will empty the value in the input. 
     $("#errmsg").html("Digits Only").show().fadeOut("slow"); 
     return false; 
    } 
}); 

ПРИМЕЧАНИЯ: Однако опорожнение ввода делает удаляет полное значение даже при наличии номер в этом я предпочитаю keydown в таких случаях.

Обновлено

Это немного хак на входное значение, но (я по-прежнему предпочитают идти с KeyDown), Используйте это, если вы действительно хотите KeyUp работать :). поскольку я изменяю поведение браузера по умолчанию, вам также может потребоваться множество других случаев.

$("#quantity").keyup(function (e) { 
//if the letter is not digit then display error and don't type anything 
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
    //display error message 
    if(e.which != 13){ //<--- don't remove when entered is pressed. 
     $(this).val(e.currentTarget.value.substr(0, e.currentTarget.value.length - 1)); 
    } 
    $("#errmsg").html("Digits Only").show().fadeOut("slow"); 
    return false; 
} 
console.log(e.currentTarget.value); 

}); 

working fiddle

+2

$ (this) .val ('') удалит полное значение, даже если значение уже имеет некоторое число – prashant

+0

Я могу использовать '.keydown', но' console.log (e.currentTarget.value); 'дает предыдущий номер , Я имею в виду, если в текстовом поле уже есть 2, и я вхожу в 3, он не показывает 23. но показывает 2 в console.log. Я хочу получить текущее значение в console.log, который находится в текстовом поле. Надеюсь, вы понимаете http://jsfiddle.net/dgireeshraju/HkEuf/7300/ – Gireesh

+0

@prashant Маленький взлом должен работать :) .. Я на самом деле не предпочитаю этого, но я работаю;) :): p – bipen

2

KeyUp срабатывает после символа вставляется только, как вы можете видеть ваши функции на самом деле вызова и предупреждающее сообщение отображения.

Если попробовать тот же код с KeyDown он будет работать, как это событие будет вызываться до того, как символ вставляется

//called when key is pressed in textbox 
    $("#quantity").keydown(function (e) { 
    //if the letter is not digit then display error and don't type anything 
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
     //display error message 
     $("#errmsg").html("Digits Only").show().fadeOut("slow"); 
       return false; 
    } 
    }); 
+0

Я могу использовать. keydown, но console.log (e.currentTarget.value); дает предыдущее число.Я имею в виду, если в текстовом поле уже есть 2, и я вхожу в 3, он не показывает 23. но показывает 2 в console.log. Я хочу получить текущее значение в console.log, который находится в текстовом поле. Надеюсь, вы поймете http://jsfiddle.net/dgireeshraju/HkEuf/7300/ – Gireesh

+0

Да, это потому, что, когда вы нажимаете «3» и пытаетесь записать его в ключ, он не может записать «3», поскольку он еще не вставлен. – ssilas777