Klaviatura faqat haqiqiy belgilar bilanmi?

oddiy savol: Menda ichki yorliqli kirish maydonlari bor! Xuddi yuqori o'ng burchakdagi ushbu saytdagi qidiruv oynasi kabi. Men yorliqni yozishni boshlaganimda, u yashiringan.

Kirish mumkin bo'lgan sabablarga ko'ra menda haqiqiy kirish maydonining orqasida joylashgan haqiqiy teglar mavjud. Shuning uchun men kirish maydoniga fill sinfini qo'shaman, shuning uchun fon rangi endi shaffof emas.

inputs.keydown(function (e) {
     $(this).addClass(fill);
});

Kichkina kamchilikdan tashqari hamma narsa yaxshi ishlaydi. Har safar kirish maydoniga e'tibor qaratib, "Shift" "Ctrl" yoki "CMD" kabi tugmachani bosganimda yorliq yo'qoladi. Biroq, bu hali kiritilmagan!

Buni qanday qilish haqida fikringiz bormi?

inputs.keydown(function (e) {
        switch (e.keyCode) {        
            case 13: // Enter
            case 16: // Shift
            case 17: // Ctrl
            case 18: // Alt
            case 19: // Pause/Break
            case 20: // Caps Lock
            case 27: // Escape
            case 35: // End
            case 36: // Home
            case 37: // Left
            case 38: // Up
            case 39: // Right
            case 40: // Down

            // Mac CMD Key
            case 91: // Safari, Chrome
            case 93: // Safari, Chrome
            case 224: // Firefox
            break;
        }

        $(this).addClass(fill);
    });

Bu men yorliqni xiralashtirishni istamaydigan barcha kalit kodlar bo'ladi! Haqiqiy belgilarni kiritishda to'ldirish klassi qo'shilishi kerak. Btw. barcha holatlar bilan almashtirish iboralarini yozish uchun yaxshiroq sintaksis bormi?


person matt    schedule 05.01.2012    source manba
comment
jQuery hodisasi obyekti api.jquery.com/category/events/event-object altKey,ctrlKey,metaKey,shiftKey xususiyatlariga ega, ularni siz ham tekshirib koʻrishingiz mumkin.   -  person StuperUser    schedule 05.01.2012


Javoblar (3)


Bu faqat addClass ni hech qanday holat bo'lmaganda bajaradi:

inputs.keydown(function (e) {
    switch (e.keyCode) {        
        case 13: // Enter
        case 16: // Shift
        case 17: // Ctrl
        case 18: // Alt
        case 19: // Pause/Break
        case 20: // Caps Lock
        case 27: // Escape
        case 35: // End
        case 36: // Home
        case 37: // Left
        case 38: // Up
        case 39: // Right
        case 40: // Down

        // Mac CMD Key
        case 91: // Safari, Chrome
        case 93: // Safari, Chrome
        case 224: // Firefox
        break;
        default:
          $(this).addClass(fill);
        break;
    }
});

Lekin jQuery dan foydalanayotganingiz uchun va kichikroq yechimni istasangiz, buni sinab ko'ring:

inputs.keydown(function (e) {
  if($.inArray(e.keyCode,[13,16,17,18,19,20,27,35,36,37,38,39,40,91,93,224])) return;
  $(this).addClass(fill);
});
person bardiir    schedule 05.01.2012
comment

Men buni tushunib etdim... aslida mening maketimda (gorizontal) menda belgilash maydoni, keyin label maydoni bor.. G'alati sabablarga ko'ra, USE_ALL_WIDTH ni belgilamagan bo'lsam ham, tasdiqlash qutisi os6/7 simulyatorlarida barcha gorizontal joyni egallaydi. Tartibni bekor qilish va belgilash maydoni uchun o'lchamlarni belgilash orqali tartib hozir to'g'ri ishlamoqda. Maslahatlar uchun rahmat :)

- person paulslater19; 05.01.2012

Agar belgilar kiritish bilan shug‘ullanayotgan bo‘lsangiz, uning o‘rniga keypress() dan foydalaning. U siz qochmoqchi bo'lgan ko'pchilik kalitlarga e'tibor bermaslik haqida allaqachon g'amxo'rlik qiladi. U Enter da ishga tushiriladi, lekin bu yerda taklif qilingan usulda buni osongina hisoblab chiqishingiz mumkin.

$("input").keypress(function (e) {
    if( e.which == 13 ){ return false; }
    $(this).addClass(fill);
}
person Bruno Lange    schedule 11.12.2012
comment
Va o'qlar uchun ham ishonchli emasga o'xshaydi: stackoverflow.com/questions /19347269/jquery-keypress-arrow-keys - person Alex; 26.10.2014

Siz nima qila olasiz, tugmani bosishdan oldin va keyin matn uzunligini oling va farq bor yoki yo'qligini tekshiring. Agar mavjud bo'lsa, bu haqiqiy belgi yoki joylashtirish hodisasi edi, bu holda siz fon rangini qo'llashingiz kerak.

ya'ni, shunga o'xshash narsa:

var dataLength = 0;

// use keyup instead of keydown to ensure that we catch the event after the data has been entered
inputs.keyup(function (e) { 
   if($(this).val().length != dataLength) $(this).addClass(fill);

   ... 

   dataLength = $(this).val().length;

   // re-apply placeholder text if no text
   if(dataLength == 0) $(this).removeClass(fill);
}

Yaxshisi, jQuery textchange hodisa plaginidan foydalaning. http://www.zurb.com/playground/jquery-text-change-custom-event

person techfoobar    schedule 05.01.2012