jquery keyup функциясы нөмірді тексеру

Мен пайдаланушы сандарды ғана тере алатын кіріс өрісін жасауды тырысамын. бұл функция маған қазірдің өзінде жақсы жұмыс істейді:

        $('#p_first').keyup(function(event){
        if(isNaN(String.fromCharCode(event.which))){
            var value = $(this).val();

            $(this).val(value.substr(0,value.length-1));
        }
    });

бірақ мәселе, пайдаланушы кілтті кейіпкермен ұстап тұрса, функционалдық кілт сөзді іске қоспайды .... қандай идеяларды бұған тыйым салуға болады?

12
Қосымша мәселе бергеніңіз үшін рахмет, менің ойымша, ұсынылған шешім мәселеңізді шешуі керек.
қосылды автор Kevin Bowersox, көзі
қандай кілтті ұстайды? Мәселенің себебін біршама көп сипаттай алсаңыз?
қосылды автор Kevin Bowersox, көзі
кез келген кілт ... input type = text ... және пайдаланушы «aaaaaaaaaaaaaaaa» ұстайды, сондықтан функция keyup() функциясы «а»
қосылды автор Adam Sam, көзі

8 жауаптар

keyup орнына пернесін басу оқиғасына байланыстырып көріңіз. Кілтті ұстап тұрғанда, ол бірнеше рет жұмыстан шығарылады. Түймені басқан кезде нөмір болмаса, ол preventDefault() деп аталады, ол кілт енгізу тегіне орналастырылады.

   $('#p_first').keypress(function(event){

       if(event.which != 8 && isNaN(String.fromCharCode(event.which))){
           event.preventDefault(); //stop character from entering input
       }

   });

Working Example: http://jsfiddle.net/rTWrb/2/

27
қосылды
@AdamSam жаңартылған ұсынысты қараңыз
қосылды автор Kevin Bowersox, көзі
@AdamSam Маған көмектесе алатыныма қуаныштымын.
қосылды автор Kevin Bowersox, көзі
@AdamSam Жаңартуды қараңыз
қосылды автор Kevin Bowersox, көзі
Мен тырысамын, бірақ жаңа таңбалау - функция пернесін басу әлі мәтіндік жолда емес, сондықтан оны substr ()
қосылды автор Adam Sam, көзі
ғажайып! рахмет;)
қосылды автор Adam Sam, көзі
бір нәрсе ... сандарды қазір жою мүмкін емес: D
қосылды автор Adam Sam, көзі
Рақмет! бұл көмектесті
қосылды автор Adam Sam, көзі
бұл кілт сөзді пайдаланып жасалуы мүмкін
қосылды автор Sacky San, көзі
@AdamSam Сондай-ақ, елемеу керек: көрсеткілерді, кілтті жою, тінтуірмен және блокты бос орынмен таңдалған мәтін
қосылды автор webdeveloper, көзі
ондық бөлшекке рұқсат беру үшін ... var introducedChar = String.fromCharCode (event.which); егер (event.which! = 8 && (isNaN (enteredChar) && enterChar! = '.')) ....
қосылды автор DAB, көзі
@KevinBowersox Сәлеметсіз бе, ол веб-торапта өте жақсы жұмыс істейді, бірақ мен оны ұялы телефоннан жасауға тырыстым, оны жұмыс істемейді, мобильді құрылғыларда қалай жұмыс істеуге болатыны туралы ешқандай ой жоқ
қосылды автор dipak_pusti, көзі
@KevinBowersox Менде осындай талап бар, бірақ менің жағдайда пайдаланушы теріс санды енгізе алады.Сондай-ақ, пайдаланушыға «-» нөмірге тек «-» санының бірінші
қосылды автор tarares, көзі
@DAB Ондық бөлшек чекін тексеру керек деп ойлаймын: event.which! = 190 . Мен үшін enteredChar! = '.' жұмыс істемеді
қосылды автор R Brill, көзі

Мен @Rahul Yadav берген жауапты қолдануға бел будым, бірақ ол әртүрлі кодтары бар num pad кілттерін қарастырмағандықтан қате.

Мұнда код кестесінің үзіндісін көре аласыз:

Мұнда іске асырылған функция:

function isNumberKey(e) {
var result = false; 
try {
    var charCode = (e.which) ? e.which : e.keyCode;
    if ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) {
        result = true;
    }
}
catch(err) {
    //console.log(err);
}
return result;

}

3
қосылды

Ең жақсы әдіс - басылған кілтдің орнына енгізудің мәнін тексеру. Таңбалар кодын пайдаланғанда тексеру қажет табуляторлар, көрсеткілер, артқа және басқа таңбалар болғандықтан.

Пайдаланушы кілтті басқаннан кейін бұл код кіріс мәнін тексереді:

$('#p_first').keyup(function(){
    while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){
        $('#p_first').val($('#p_first').val().slice(0, -1));
    }
});

Енгізу мәні жарамды болғанша цикл соңғы таңбаны алып тастайды. Regex /^ (([0-9] +) ((\. |,) ([0-9] {0,2})))? $/ . «12,12», «12,1», «12». «12» саны өте маңызды. (соңында нүкте) ақ жарамды! Әйтпесе, пайдаланушы кез келген кезеңге кіре алмайды.

([0-9] {0,2}) орнына ([0-9] {1,2}) жарамды флоттық нөмірі үшін тіркеу жазбасын жіберіңіз. :

$('form').submit(function(e){
    if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){
        $('#p_first').addClass('error');
        e.preventDefault();
    }
});

Notice: It is better to assign $('#p_first') into variable. var input = $('#p_first');

2
қосылды
JavaScript:

  function isNumberKey(a){
  var x=a.val();
  a.val(x.replace(/[^0-9\.]/g,''));

}

HTML:

     <td><input type="text" name="qty" onkeypress="onkeyup="return isNumberKey($(this));"" value="" style="width:100px;" field="Quantity" class="required"></td>
1
қосылды
бұл құтқару үшін шын мәнінде қайтарылады?
қосылды автор jeff, көзі
Numpad пернелерін өңдемейді
қосылды автор Sacky San, көзі
Бұл функция дұрыс емес, себебі ол әртүрлі коды бар num pad түймелерін қарастырмайды. Балама жауапты қараңыз.
қосылды автор Richard P., көзі
Бұл функция тек кіріс сан болса, шын мәніне қайтарады.
қосылды автор Rahul Yadav, көзі

Мен берілген функцияны берілген жолдың нөмірінің бар-жоғын тексеру үшін қолдандым. Бұл іске асыру пернелер мен пернетақтада жұмыс істейді, сондай-ақ numpad кілттеріне назар аударады

// Validate Numeric inputs
function isNumber(o) {
    return o == '' || !isNaN(o - 0);
}

Пернетақта немесе пернетақтада кілт кодының keyCode айнымалысы болып табылатындығына көз жеткізіңіз:

var keyCode = e.keyCode || e.which;
if (keyCode >= 96 && keyCode <= 105) {
       //Numpad keys
        keyCode -= 48;
}
console.log(isNumber(String.fromCharCode(keyCode)));
console.log(isNumber($(this).val() + String.fromCharCode(keyCode)));

Қайтар- мағыналар Қайтар- мағына мағына имеетName false, егер қайтар- false:

    var txtVal = $(this).val() + String.fromCharCode(keyCode);
    if (!isNumber(txtVal)) {
        e.returnValue = false;
    }
0
қосылды

Мына шешімді қолданып көріңіз:

jQuery('.numbersOnly').keyup(function() { 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

Demo: http://jsfiddle.net/DbRTj/

Бірдей сұрақтар:

0
қосылды
@IagoMelanias Бұл нені білдіреді? Сіз тақырыпты бастау коды туралы НЕМЕСЕ екінші кіріс туралы айтасыз ба?
қосылды автор webdeveloper, көзі
@IagoMelanias NumLock дегенді басыңыз, бұл мәселені шешуі керек.
қосылды автор webdeveloper, көзі
Оң жақ кілттерді қолдансам, ол жақсы жұмыс істемейді.
қосылды автор Iago, көзі
Мен сіздің кодыңыз туралы айтып жатырмын. Егер пернетақтаның оң жағында кілттерді қолдансам, ол жұмыс істемейді.
қосылды автор Iago, көзі

Нақты мәнді алу үшін негізгі оқиғамен event.key пайдаланыңыз. Толық бүтіндігін тексеру үшін:

isFinite(event.key);

number типті енгізуді пайдалану оңай HTML шешімі болады. Ол тек сандарға (түріне) шектейді.

<input type="number">

Қалай болғанда да, барлық пайдаланушы кірісін тазалау керек:

string.replace(/[^0-9]/g,'');
0
қосылды

Бұл әрекетті байқап көріңіз.

<html>
<input type="text" name="qty" id="price" value="" style="width:100px;" field="Quantity" class="required">
</html>

<script>
 $(document).ready(function() {
$('#price').live('keyup',function(){
        this.value = this.value.replace(/[^0-9\.]/g,'');
        });
});
</script>
0
қосылды