Это исходный код

  $('.holder').on('keypress', 'alphabet', function (e) {
        if (window.event) code = e.keyCode;
        else code = e.which;
        var myRegExp = new RegeExp(/[A-Z]/i);
        if (myRegExp.test(String.fromCharCode(code))) {
            return true;
        } else return false;
    });

Однако я хочу, чтобы этот код можно было повторно использовать как имя класса в качестве параметра, например, этот, но он не работает:

  $('.holder').on('keypress', classname, function (e) {
      if (window.event) code = e.keyCode;
      else code = e.which;
      var pattern;
      if (classname == "alphabet") pattern = /[A-Z]/i;
      else if (classname == "number") pattern = /[0-9]/;
      var myRegExp = new RegeExp(pattern);
      if (myRegExp.test(String.fromCharCode(code))) {
          return true;
      } else return false;
  });

См. эту FIDDLE

1
bumbumpaw 27 Авг 2014 в 09:34

2 ответа

Лучший ответ

Это должен быть ваш HTML. У вас должен быть атрибут name для элемента input

<div class="holder">
    alphabets only : <input type="text" name="name" class="alphabet" /><br />
    numbers only : <input type="text" name="age" class="number" />
</div>

А это JavaScript. Вам нужно событие на input, а не на holder, и вам не нужно передавать classname в качестве параметра; лучше проверьте это с помощью .attr('class')

$('input').on('keypress', function (e) {
      if (window.event) code = e.keyCode;
      else code = e.which;
      var pattern;
      if ($(this).attr('class') == "alphabet") pattern = /[A-Z]/i;
      else if ($(this).attr('class') == "number") pattern = /[0-9]/;
      var myRegExp = new RegExp(pattern);
      if (myRegExp.test(String.fromCharCode(code))) {
          return true;
      } else return false;
  });

Демо

1
hex494D49 27 Авг 2014 в 13:50

on(...) не определяет функцию. Он вызывает функцию. У вас не может быть неопределенной переменной. Оберните все это в функцию.

Кроме того, второй параметр для on(...) должен быть селектором, но "alphabet" попытается выбрать тег <alphabet>, которого не существует. Селектор класса - ".alphabet".

Вы также неправильно написали RegExp.

function applyKeypressValidation(selector, classname) {
  $('.holder').on('keypress', selector, function (e) {
      if (window.event) code = e.keyCode;
      else code = e.which;
      var pattern;
      if (classname == "alphabet") pattern = /[A-Z]/i;
      else if (classname == "number") pattern = /[0-9]/;
      var myRegExp = new RegExp(pattern);
      if (myRegExp.test(String.fromCharCode(code))) {
          return true;
      } else return false;
  });
}

applyKeypressValidation('.alphabet', 'alphabet');
applyKeypressValidation('.number', 'number');
1
Amadan 27 Авг 2014 в 09:48
Можно я так пойду? ваш ответ дает мне правильный вывод, но есть ли способ, которым я могу использовать вот так $('.holder').on('keypress', function (e,var classname) @Amadan
 – 
bumbumpaw
27 Авг 2014 в 09:51
Нет. Подпись функции, которую принимает on(...), определяется on(...), вы не можете просто изменить ее случайным образом.
 – 
Amadan
27 Авг 2014 в 09:58