Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Если input заполнен присвоить класс родителю div (https://javascript.ru/forum/jquery/70383-esli-input-zapolnen-prisvoit-klass-roditelyu-div.html)

dasha862 01.09.2017 15:57

Если input заполнен присвоить класс родителю div
 
Приветствую.

Есть скрипт, который при focus input добавляет класс к div. Подскажите, пожалуйста, как сделать что бы класс подставлялся при focus(как сейчас) и когда input заполнен.
$('.input-control').on('focus blur', function(e){
   $(this).parent()[e.type === 'focus' ? 'addClass' : 'removeClass']('input-focused');
});

<div><input name="email" type="text" class="input-control"></div>  
<div><input name="password" type="password" class="input-control"></div>

ksa 01.09.2017 16:00

Цитата:

Сообщение от dasha862
и когда input заполнен

А что значит "input заполнен"?

dasha862 01.09.2017 16:03

Когда пользователь ввел логин и/или пароль.

ksa 01.09.2017 16:04

Цитата:

Сообщение от dasha862
Когда пользователь ввел логин или пароль.

Как понять, что ввод логина или пароля завершен?

dasha862 01.09.2017 16:10

Моя задача - оформление div и input при focus и когда в поле что-то написано(т.е не пустое), для этого нужен класс.

j0hnik 01.09.2017 16:22

Цитата:

Сообщение от dasha862 (Сообщение 463375)
Моя задача - оформление div и input при focus и когда в поле что-то написано(т.е не пустое), для этого нужен класс.

замените ваш, на этот
$('.input-control').on('focus blur', function(e){
   if(!$(this).val())$(this).parent()[e.type === 'focus' ? 'addClass' : 'removeClass']('input-focused');
});

dasha862 01.09.2017 16:25

Это просто отлично!
Большое Спасибо!

dasha862 01.09.2017 16:55

Только вот ошибка в консоли появилась:
TypeError: "removeClass" is not a function

Nexus 01.09.2017 17:01

j0hnik, может я что-то не понял, но по-моему (и судя по посту 8) в строке 3 какая-то хрень написана.

$(this).val() не вернет объекта jq, а у string||null нет методов addClass, removeClass.

dasha862 01.09.2017 17:03

Скрипт работает, но ошибка вылезла:
TypeError: "removeClass" is not a function

j0hnik 01.09.2017 17:05

$('.input-control').on('focus blur', function(e){
   if(!$(this).val())$(this).parent()[e.type === 'focus' ? 'addClass' : 'removeClass']('input-focused');
});

прошу прощения

Nexus 01.09.2017 17:07

dasha862, добавить класс, если это focus и поле заполнено.
$('.input-control').on('focus blur', function(e){
	$(this).parent()[(e.type=='focus' && $.trim($(this).val()).length)?'addClass':'removeClass']('input-focused');
});

j0hnik 01.09.2017 17:14

Nexus,
Только не && а или ||

dasha862 01.09.2017 17:20

Не знаю в чем разница между а или ||, поставила ||, все ок. СПАСИБО ВАМ!

Nexus 01.09.2017 17:27

dasha862, https://learn.javascript.ru/logical-ops

dasha862 01.09.2017 17:32

Благодарю:) , похоже тот же принцип, что и в smarty.

dasha862 03.09.2017 21:33

В продолжении темы.
При заполнении полей и отправки формы, например, код с картинки введен неправильно, страница обновляется, поля по-прежнему заполнены, но скрипт почему-то не подставляет класс input-focused, т.е не определяет, что они заполнены. Подскажите, пожалуйста, как это реализовать.
Проверяла на обоих вариантах.

j0hnik 03.09.2017 22:29

if($('.input-control').val())$('.input-control').parent().addClass('input-focused');

добавьте перед функцией

dasha862 03.09.2017 22:44

Я Вам очень признательна. Спасибо.

dasha862 06.09.2017 14:03

Подскажите, пожалуйста, как в скрипте указать, что parent - это div(еще лучше с классом), понадобилось обернуть input span-ом, и ему присвоился класс input-focused.
if($('.input-control').val())$('.input-control').parent().addClass('input-focused');

$('.input-control').on('focus blur', function(e){
   if(!$(this).val())$(this).parent()[e.type === 'focus' ? 'addClass' : 'removeClass']('input-focused');
});

<div><span><input name="email" type="text" class="input-control"></span></div> 
<div><span><input name="password" type="password" class="input-control"></span></div>

Nexus 06.09.2017 14:06

dasha862,
.parents('div.some-class')

dasha862 06.09.2017 14:27

Если поняла правильно, должно выглядеть так:
if($('.input-control').val())$('.input-control').parent('div.form-group').addClass('input-focused');

$('.input-control').on('focus blur', function(e){
   if(!$(this).val())$(this).parent('div.form-group')[e.type === 'focus' ? 'addClass' : 'removeClass']('input-focused');
});

<div class="form-group"><span><input name="email" type="text" class="input-control"></span></div> 
<div class="form-group"><span><input name="password" type="password" class="input-control"></span></div>


В вышеуказанном варианте, к <div class="form-group"> не присвоился класс input-focused.

dasha862 06.09.2017 14:30

Извините, не исправила у себя на parents. Спасибо!


Часовой пояс GMT +3, время: 13:57.