2011-02-05 2 views
3

У меня есть HTML текстового поле с некоторыми имеющими именами классов как чиселJQuery селекторы класса

<input type="text" name="msg_timeout" class="numbers" /> 

так же существует различное текстовое поле с классом, как чисел .I хочет назначить KeyDown события тех текст который имеет класс как номер, поэтому я попробовал со следующим, но не работал

$('input.numbers').each 

$('.numbers').each 

$('input.numbers:text').each 

$('input:text.numbers').each 

$('input[type=text]').each // only this is working but it selects all textboxes. 

доброжелательный дайджест идеи. КОД НИЖЕ

$(document).ready(function() { 


    $('input.numbers').each(function() { 

     $(this).get(0).oncontextmenu = function() { return false; }; 
      $(this).bind("keydown",function(event) { 
      // alert(window.event); 

      // Allow only backspace and delete 
      if (event.keyCode == 46 || event.keyCode == 8 
        && (event.keyCode >=96 && event.keyCode <=105)) 
      { 
       // let it happen, don't do anything 
      } 
      else { 
       // Ensure that it is a number and stop the keypress 
       if (event.keyCode < 48 || event.keyCode > 57 || event.shiftKey || event.ctrlKey || event.altKey) { 
        event.preventDefault(); 
       } 
      } 

      var forbiddenKeys = new Array('c', 'x', 'v'); 
      var keyCode = (event.keyCode) ? event.keyCode : event.which; 
      var isCtrl; 
      isCtrl = event.ctrlKey; 
      if (isCtrl) { 
       for (i = 0; i < forbiddenKeys.length; i++) { 
        if (forbiddenKeys[i] == String.fromCharCode(keyCode).toLowerCase()) { 
         //alert('You are prompted to type this twice for a reason!'); 
         return false; 
        } 
       } 
      } 
      return true; 
     }); 
    }); 

}); 
+1

Все ваши примеры должны работать ... так что, возможно, что-то еще не так в вашем коде. Показать больше, чем просто '.each'. – ThiefMaster

+0

Я согласен с ThiefMaster. Вы называете эти селекторы после dom.ready, как показано ниже? – xzyfer

+0

Я вызываю каждую функцию document.ready –

ответ

3

Вы называете селекторов после dom.ready?

$(document).ready(function() { 
    $('input.numbers').keydown(function() { 
     // code here 
    }); 
}); 

без $(document).ready() это непредсказуемо, какие элементы будут присутствовать на экране, когда ваш селектор оценивается.

1

Вам не нужно явно перебирать все совпадающие элементы для назначения обработчиков событий для них. Следующее будет делать трюк:

// bind a keydown handler to all input elements with class 'numbers' 
$("input.numbers").keydown(function() { 
    // handler implementation here 
}); 
1

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

В таком случае .. использование ..

$("input.numbers").live('keydown', function() { 
    // do stuff here 
}); 
+0

Также, как предложил xzyfer, убедитесь, что вы прикрепляете материал в '$(). Ready()'. –

0

вы имеете в виду «номера» не как текст, а как числа, цифры, целое число?

$("input").filter(function() { 
    return $(this).attr("class").match(/\d+/); 
}); 
Смежные вопросы