2016-02-27 8 views
0

Я хотел бы добавить класс, если ввод пуст и удалить его, если это не так. Я изначально был addClass(); поэтому я попытался с помощью:Добавить класс, если ввод пуст и удалить его, если нет

.removeClass().addClass(); 

Но это, кажется, не обновить класс по нажатию кнопки.

HTML:

<input id="firstName" type="text" /> 
<input id="lastName" type="text" /> 
<a href="#" id="button">SEND</a> 

JQuery:

var firstName = $("#firstName"); 
var lastName = $("#lastName"); 

$('#button').click(function() { 
    if(firstName.val() == "" || lastName.val() == ""){ 
     firstName.removeClass("errorInput").addClass("errorInput"); 
     lastName.removeClass("errorInput").addClass("errorInput"); 
    } 

if ($(":input").hasClass("errorInput")) { 
     alert("false"); 
    } else { 
     alert("true"); 
    } 
}); 

JSFiddle

+2

Вы удаляете класс, а затем добавить его обратно в –

ответ

3

Вы пытаетесь toggle the class. Для этого есть способ!

Цитирование из связанного дока:

Вторая версия .toggleClass() использует второй параметр для определения того, следует ли быть добавлен или удален класс. Если значение этого значения равно true, тогда класс добавляется; если false, класс удален. По сути, заявление:

$("#foo").toggleClass(className, addOrRemove); 

эквивалентно:

if (addOrRemove) { 
    $("#foo").addClass(className); 
} else { 
    $("#foo").removeClass(className); 
} 

Что-то вдоль линий firstName.toggleClass("errorInput", firstName.val() === "") должны работать для вашего случая.

+0

'firstName.toggleClass («errorInput», firstName.val() === "") ' – Hamms

+0

toggle просто переключает класс при нажатии кнопки, независимо от того, пустой ли вход или nto – user4756836

+0

Toggle может принимать условный аргумент, указывающий, включать или выключать класс. – Hamms

2

Ваш код не принимает во внимание тот случай, когда один вход пуст, а другой нет.

https://jsfiddle.net/0tfenwto/2/

if(firstName.val() == "") 
    firstName.addClass("errorInput"); 
else 
    firstName.removeClass("errorInput") 

if(lastName.val() == "") 
    lastName.addClass("errorInput"); 
else 
    lastName.removeClass("errorInput") 

EDIT: Общий длина входного проверки. https://jsfiddle.net/0tfenwto/3/

$('#button').click(function() { 
    $('input').each(function(){ 
     var val = $(this).val(); 
     $(this).toggleClass("errorInput",val.length==0) 
    }) 
}); 
+0

Я бы предпочел избежать многих блоков. У меня много полей ввода, и поэтому оператор my if имеет несколько проверок в одной строке. – user4756836

+0

Избегание дублирования кода - это хорошо, однако неверные представления об ошибках неверны. Проверьте мое редактирование для общего решения. –

+0

@ user4756836 - Значит, вы будете отображать поле «Имя» как находящееся в состоянии ошибки *, хотя это не просто, чтобы избежать лишнего if/else? К счастью, есть более короткий способ закодировать его, без if/else, но даже если бы не было, вы действительно должны написать столько кода, сколько необходимо, чтобы избежать путаницы с пользователем. – nnnnnn

3

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

var firstName = $("#firstName"); 
var lastName = $("#lastName"); 

$('#button').click(function() { 

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

    if($this.val()===""){ 
     $(this).addClass("errorInput"); 
    } 

    else{ 
     $(this).removeClass("errorInput"); 
    } 


    }); 

}); 

 Смежные вопросы

  • Нет связанных вопросов^_^