2010-06-22 6 views
0

Я пытаюсь добавить класс ошибки в текстовое поле ввода, чтобы показать пользователю, что их вход недействителен.
В событии изменения я получаю ссылку на то, что, как я полагаю, является полем ввода и хранением его в переменной.
Вызов addClass для переменной не работает должным образом. У меня есть firebugged код и $ textBox - это правильное текстовое поле, поэтому я не уверен, чего здесь не хватает. У меня есть много входов, которые имеют класс «edit-budget-local», поэтому мне нужно настроить таргетинг на измененное текстовое поле. Благодарю.jQuery addClass не работает при добавлении к переменной «this» объекта

$("input.edit-budget-local").change(function() { 

    var $textBox = this; 

    var newValue = $textBox.value; 

    if (newValue.match(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/) == null) { 

     $textBox.addClass("error"); 
    } 


}); 

ответ

2

Попробуйте

$textBox = $(this); 

хотя, кажется, ошибка (в плане использования JQuery) в ЛУ 5, где новое_значение должен быть $textBox.val();

+1

Это не ошибка, это всего лишь деталь реализации (возможно, вы не согласны с этим). – R0MANARMY

+0

@ R0MANARMY да, согласен, но в традиционной реализации он вернет TypeError: Результат выражения 'newValue' [undefined] не является объектом –

+0

За исключением того, что в JS нет типов (действительно). и что-то вроде 'myObject.nonExistenValue =" foo "создает это значение и устанавливает его значение' 'foo" '. Лучше думать о объектах JS как ассоциативных массивах, чем о классах. – R0MANARMY

0

Вы должны изменить эту строку: var $textBox = $(this); так что вы на самом деле кэшировали копию объекта jQuery, а не только вход.

0

Возвращаемый объект "this" не является объектом jQuery. Попробуйте заменить линии

var $textBox = this; 

с

var $textBox = $(this); 
+0

Это не сработает, потому что это вызовет вызов $ textBox.value для отказа, поскольку значение не отображается (например, этим) объектом jQuery. – R0MANARMY

+0

Это сработало бы, но поскольку «значение» не является членом какого-либо объекта jQuery, необходимо сделать два изменения; и использование функции val() вместо несуществующего свойства value. –

1

у вас есть ошибка здесь,

$textBox.addClass("error"); 

попробовать, как это,

$("textBox").addClass("error"); 
1

Это должно работать, если селектор и регулярное выражение правильно

$("input.edit-budget-local").change(function() { 
    var textBox = $(this); 
    var newValue = textBox.val(); 

    if (newValue.match(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/) == null) { 
     textBox.addClass("error"); 
    } 
}); 
Смежные вопросы