@Statium

Минимизировать функцию на jquery?

Имеется функция на jquery, подсвечивающая поля ввода если они пустые, но функция сдается мне некрасивая в реализации. Необходимо повторять одно и то же действие (подсвечивать поле и изменять бордер) для нескольких похожих элементов
function checkParams() {
if($('#sitename').val().length != 0) {
$('#sitename').removeAttr('style');
} else {
$('#sitename').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#desc').val().length != 0) {
$('#desc').removeAttr('style');
} else {
$('#desc').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#metadesc').val().length != 0) {
$('#metadesc').removeAttr('style');
} else {
$('#metadesc').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#metawords').val().length != 0) {
$('#metawords').removeAttr('style');
} else {
$('#metawords').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#copyrights').val().length != 0) {
$('#copyrights').removeAttr('style');
} else {
$('#copyrights').attr('style', 'border-color:#dc4747; background:#feecec');
}

if($('#notesview').val().length != 0) {
$('#notesview').removeAttr('style');
} else {
$('#notesview').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#commentsview').val().length != 0) {
$('#commentsview').removeAttr('style');
} else {
$('#commentsview').attr('style', 'border-color:#dc4747; background:#feecec');
}
if($('#commentssize').val().length != 0) {
$('#commentssize').removeAttr('style');
} else {
$('#commentssize').attr('style', 'border-color:#dc4747; background:#feecec');
}

if($('#nickname').val().length != 0) {
$('#nickname').removeAttr('style');
} else {
$('#nickname').attr('style', 'border-color:#dc4747; background:#feecec');
}
}

Ниже приведено куча полей для которых нужна проверка, например
<div class="settingname"><b>Копирайты</b> (копирайты находятся в подвале сайта)</div>
<input id="copyrights" maxlength="50" placeholder="Копирайты" onkeyup="checkParams()" type="text" class="field" name="copy" value="<? echo htmlspecialchars($ini->read('main','copyrights')); ?>" />


Помогите минимизировать функцию, заранее спасибо)
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
Stalker_RED
@Stalker_RED
function pew(selector) {
  if($(selector).val().length != 0) {
    $(selector).removeAttr('style');
  } else {
    $(selector).css(styles = {
      borderColor : "#dc4747",
      background: "#feecec"
    });
  }
}

['#sitename', '#desc', '#metadesc'] // и все остальные сюда
  .forEach(selector=>pew(selector))


А может быть вам подойдет что-то такое:
$('#myForm :input').on('change', function(){
  $this = $(this)
  if($this.val().length != 0) {
    $this.removeAttr('style');
  } else {
    $this.css(styles = {
      borderColor : "#dc4747",
      background: "#feecec"
    });
  }
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@eternalfire
зачем изобретать велосипеды, если всё уже изобретено? если вам нужна верификация полей добавляйте атрибут required в тег input дальше браузер сделает всё за вас

если нужна какая то другая - есть замечательный jquery.validation и inputmask

в большинстве случаев клиентской проверки будет достаточно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект