шаблон соответствия jQuery - PullRequest
       21

шаблон соответствия jQuery

1 голос
/ 17 декабря 2009

Я пытаюсь проверить мои входные данные с помощью jQuery перед отправкой формы.

Вот как выглядят мои поля ввода, когда в базу данных не вставлено значение :

    <input
      class="field"
      type="text"
      style="background-color: rgb(255, 255, 255);"
      value="" name="input_18748_388_1257894000_"/>

Вот как выглядят мои поля ввода, когда в базу данных вставлено существующее значение :

    <input
      class="field"
      type="text"
      style="background-color: rgb(255, 255, 255);"
      value=""
      name="input_18748_388_1257894000_46549876"/>

Я бы хотел:

  • Проверьте, есть ли значение в базе данных

  • Проверьте, не хочет ли пользователь заменить существующее значение ничем или нулем и Запретить это.

  • Проверьте, пытается ли пользователь вставить 0 в новом поле и Запретить это.


Решено:

  $("input[name^='input_"+var+"_']")
                .each(function() {
                    if ($(this).attr('name').match(/^input_\d+_\d+_\d+_\d+/)
                        && ($(this).val() == '' || $(this).val() <= 0))
                    {
                        displayDialog("<?=_('error')?>")
                        flag_error = 1;
                        return false;
                    }
            });
    // Submit the form.

Ответы [ 5 ]

2 голосов
/ 17 декабря 2009

Попробуйте это:

$('input[name]')
    .filter (function () { 
        return $(this).attr('name').match (/^input_\d+_\d+_\d+_.+/$); 
    })
    .each (function () {
        if ($(this).val() <= 0) {
            //... raise a fuss ...
        }
    });

Это нужно вызывать на submit или change, как вы предпочитаете.

1 голос
/ 17 декабря 2009
 $("input[name^='input_"+var+"_']")
                .each(function() {
                    if ($(this).attr('name').match(/^input_\d+_\d+_\d+_\d+/)
                        && ($(this).val() == '' || $(this).val() <= 0))
                    {
                        displayDialog("<?=_('error')?>")
                        flag_error = 1;
                        return false;
                    }
                });
1 голос
/ 17 декабря 2009

Вам необходимо связать событие нажатия клавиш и проверить коды клавиш. В этом примере будет отключен пробел и символ 0 в полях ввода с атрибутом имени, заканчивающимся на «_»:

$('input[name$=_]').bind('keydown', function(e) {
    var key = e.keyCode || e.which;
    if (key == 48 || key == 32) {
        e.preventDefault();
    }
})
0 голосов
/ 17 декабря 2009

Вы можете воспользоваться Regex Selector для jQuery Plugin . Это позволяет код как:

$('div:regex(input,^input_(\d+|)+_?$)'); //just an example regex

Также обратите внимание, что вы можете комбинировать несколько селекторов атрибутов, например:

$("input[name^='input_'][name$='_']")
0 голосов
/ 17 декабря 2009

Добавьте класс "my_very_special_input" к каждому элементу ввода, который вы хотите проверить таким образом:

$(".my_very_special_input").change( function() {
                            if ($(this).val() <= 0) {
                                    alert('You cant delete this');
                                    flag_error = 1;
                                    return false;
                              }
                    });
...