Javascript для проверки правильности и изменения цвета текстового поля

#javascript #jquery #asp.net #validation #client-side-validation

#javascript #jquery #asp.net #проверка #проверка на стороне клиента

Вопрос:

Проверьте код:

 <script type="text/javascript">
    function ValidateTextBox(source, args) {
        var is_valid = false;

        //Regex goes here
        var regex = /^[a-z A-Z] $/;
        var check = regex.test($('tbName').val()); //Checks the tbName value against the regex
        if (check == true) {
            //If input was correct
            is_valid = true;
        }
        else {
            //If input is not correct
            $("tbName").css(("background-color", "#A00000"), ("border-color", "#780000"));
        }
        args.IsValid = is_valid; //Returns validity state
    }
</script>
 

Я пытаюсь проверить ввод текстового поля, чтобы его единственный символ был между a и z, а также A и Z, но он по-прежнему возвращает true даже при вводе типа «1245».

Почему это так?

Спасибо

Комментарии:

1. Значение /^[a-z A-Z] $/.test("1234") false в том, что проблема не в вашем регулярном выражении. Проверьте, какое значение вы передаете test()

2. Попробуйте инвертировать ваше регулярное выражение, чтобы найти что-нибудь недопустимое: /[^a-z A-Z]/ и if (check) { invalid } . Прямо сейчас ваше регулярное выражение прерывается, если вводимый текст многострочный.

3. Я пытаюсь проверить значение, которое я передаю, но оно не работает должным образом. Правильно ли я выбираю элемент управления?

4. Хорошо, мне удалось проверить входные данные, выполнив: var test = $(‘#tbName’).val(); И тест содержит «undefined». Означает ли это, что элемент управления не был найден?

5. Извините за все комментарии, но я нашел проблему. Поскольку я использую masterpages, фактическим идентификатором был «ContentPlaceHolder1_tbName». Есть ли более чистый способ выбрать элемент управления и игнорировать приложение-заполнитель?

Ответ №1:

$('tbName') может быть недопустимым селектором.

Вы имели в виду выбрать класс?

 $(.tbName')
 

Как насчет элемента с идентификатором = tbName ?

 $('#tbName')
 

Кроме того, зачем вам это нужно делать? Это НЕ будет доступно вне функции, поскольку это локальная переменная, передаваемая функции (через ее параметры)

 args.IsValid = is_valid;
 

Вы можете просто выполнить простой возврат:

 function ValidateTextBox() {
    var regex = /^[a-z A-Z] $/;
    return regex.test($('#tbName').val());
}
 

Комментарии:

1. О, черт, я такой новичок в javascript… как мне выбрать текстовое поле с этим идентификатором? Это показано здесь: <asp:TextBox CssClass=»block» ID=»tbName» runat=»server»></asp:TextBox>

2. «Кроме того, зачем вам это нужно делать? Это НЕ будет доступно вне функции, поскольку это локальная переменная, передаваемая функции (через ее параметры) » Мне нужно проверить в методе, чтобы увидеть, соответствует ли он, чтобы я мог изменить цвет текстового поля. Не знал, что перед идентификатором элемента управления нужно ставить «#». Спасибо!

3. Понятно, а для чего нужен символ $? Нужно ли сообщать javascript, что в следующей строке используется метод jQuery?