Цвет фона обязательного поля

Я использую обязательный атрибут в определенных полях формы. При отправке формы обязательные поля, которые не заполнены, обрамляются стандартной красной рамкой. Есть ли способ также изменить цвет фона обязательного поля, которое не заполнено после отправки? Вот пример текстового поля, которое я использую с обязательным атрибутом:

<input id="LastName" name="LastName" type="text"  placeholder="Last Name" required/>

person dr1054    schedule 01.10.2016    source источник
comment
Вам нужно изучить проверку.... которая обычно обрабатывается Javascript   -  person Paulie_D    schedule 01.10.2016


Ответы (5)


Вы можете использовать селектор атрибутов CSS следующим образом:

input[required] {
  background-color: red;
}
<input id="LastName" name="LastName" type="text"  placeholder="Last Name"
required/>

Это выберет input с атрибутами required. Теперь вы можете применить это с помощью простого JavaScript для достижения желаемого эффекта:

var submit_button = document.getElementById("submit_button");

submit_button.addEventListener("click", function(e) {
  var required = document.querySelectorAll("input[required]");
  
  required.forEach(function(element) {
    if(element.value.trim() == "") {
      element.style.backgroundColor = "red";
    } else {
      element.style.backgroundColor = "white";
    }
  });
});
<input id="FirstName" name="FirstName" type="text"  placeholder="First Name" required/>
<input id="LastName" name="LastName" type="text"  placeholder="Last Name" required/>

<input id="submit_button" type="submit">

Это добавляет прослушиватель событий при нажатии кнопки отправки. Когда это так, он использует querySelectorAll для получения всех входных данных, которые соответствуют селектору атрибута CSS, input[required]. Затем он выполняет цикл for-each для возвращаемого списка элементов. Наконец, он проверяет каждое введенное значение, обрезает его, чтобы убедиться, что там есть какой-то контент (пробелы не учитываются). Если на входе ничего нет, он устанавливает красный цвет фона.


Примечания:

Вы можете настроить его по своему усмотрению, обязательно отмените любое событие, которое вы обрабатываете, если входные данные недействительны, и вы можете добавить классы для стилей вместо использования element.style.<style>.

person Andrew Li    schedule 01.10.2016
comment
Я не думаю, что вы хотели бы, чтобы это отображалось всегда - сразу после отправки, например, граница, для которой потребуется JavaScript. - person Drew Kennedy; 01.10.2016
comment
Нарисовал - да правильно, только после подачи. Спасибо, парни. - person dr1054; 01.10.2016
comment
Ааа, я не видел твоего обновления. Я удалю свой ответ. :) - person Drew Kennedy; 01.10.2016

Вы можете изменить его с помощью css, как указано в некоторых комментариях выше, если это не работает, проверьте, установлен ли родительский атрибут background-color, в этом случае вы можете использовать тег !important для принудительного применения дочернего элемента.

person Rahul_69    schedule 01.10.2016

Здравствуйте, вы можете попробовать это с помощью базового Css

:required {
 background: red;
 }

Или, используя jQuery, он будет работать динамически. При нажатии кнопки цвет фона будет красным, надеюсь, это поможет.

HTML-код

<input id="LastName" name="LastName" type="text"  placeholder="Last Name"
required/>
<input id="sub" type="button">

и код jquery

 <script>
$('#sub').click(function(){
$('#LastName').each(function() {
if($(this).val() == '') {
$(this).css('background-color' , '#FF0000');
$(this).attr("placeholder", "Required");
 }
 });
 });
 </script>  

Но если вы хотите сделать это для всей формы, это будет примерно так:

    <script>
    $('#sub').click(function(e){ //submit button name
    e.preventDefault()
    $('.required').each(function() {   //a constant class for evert input item
    if($(this).val() == '') {
    $(this).css('background-color' , '#FF0000');
    $(this).attr("placeholder", "Required");
    }
    });
    });
    </sctript>

см. приведенную ниже скрипту требуемый скрипт

необходимо добавить в библиотеку jQuery head

<head>
<script        
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">   
</script>
</head>
person Asifuzzaman Redoy    schedule 01.10.2016
comment
Итерация по идентификатору для одного входа? В этом нет особого смысла, поскольку вы надеетесь, что идентификаторы уникальны. - person Drew Kennedy; 01.10.2016
comment
Я просто показываю образец. Если все входные данные находятся в форме или div, тогда идентификатор div должен быть там в jQuery. - person Asifuzzaman Redoy; 01.10.2016
comment
Asifuzzaman - Я использовал ваш скрипт для всей формы. Однако для html с кнопкой отправки я сказал type=submit вместо type=button. На самом деле пробовал оба, и ни один не работал. Он по-прежнему имеет красную рамку вокруг текстового поля и не меняет цвет фона после отправки. - person dr1054; 01.10.2016
comment
эй, я понимаю, почему вы столкнулись с тем, что видите мой обновленный последний ответ сценария, добавленный со скрипкой, чтобы вы поняли, надеюсь, это поможет вам, если нет, пожалуйста, дайте мне знать - person Asifuzzaman Redoy; 01.10.2016
comment
Привет .. все еще не работает для меня. Скопировал весь код из вашей скрипки. Тем не менее просто получить красную рамку. - person dr1054; 01.10.2016
comment
я не понимаю, как это работает в Fiddle. Вы использовали библиотеку jQuery внутри раздела заголовка ?? ‹script src=ajax.googleapis. com/ajax/libs/jquery/2.1.1/ - person Asifuzzaman Redoy; 01.10.2016

person    schedule
comment
Это будет постоянно окрашивать фон всех текстовых вводов. OP хочет только, когда форма проверяется. - person j08691; 01.10.2016

person    schedule
comment
Пожалуйста, включите объяснение вашего кода, а также это поможет использовать форматирование кода и/или правильный отступ для удобочитаемости. - person Ryan Tuosto; 07.05.2017