Задать вопрос

Проверка на javascript — как сделать короче?

Написал проверку input на правильность введенных значений. Но в глубине души мне кажется, что это быдлокод и можно сделать все это покороче. Правда в голову ничего другого не приходит.
P.S. Про плагины валидации к JQuery в курсе.
function addItem() {
	var carName = $('#add_item_car_name').val();
	var modelName = $('#add_item_model_name').val();
	var itemName = $('#add_item_name').val();
	var caseType = $('#add_item_case_type').val();
	var itemEngine = $('#add_item_engine').val();
	var carbodyType = $('#add_item_carbody_type').val();
	var itemGearbox = $('#add_item_gearbox').val();
	var itemArtikul = $('#add_item_artikul').val();
	var itemPrice = $('#add_item_price').val();
	var file = $('#add_item_emblem').val();
	var fileType = file.split('.').pop();
	if (carName == '- - -' || carName == '') {
		alert('Вы не ввели название машины');
		return false;
	}
	if (modelName == '- - -' || modelName == '') {
		alert('Вы не ввели название модели');
		return false;
	}
	if (itemName == '') {
		alert('Вы не ввели название товара');
		return false;
	}
	if (caseType == '') {
		alert('Вы не ввели тип товара');
		return false;
	}
	if (itemEngine == '') {
		alert('Вы не ввели тип двигателя');
		return false;
	}
	if ( carbodyType == '') {
		alert('Вы не ввели тип кузова');
		return false;
	}
	if ( itemGearbox == '') {
		alert('Вы не ввели тип коробки передач');
		return false;
	}
	if ( itemArtikul == '') {
		alert('Вы не ввели артикул');
		return false;
	}
	if ( itemPrice == '') {
		alert('Вы не ввели цену');
		return false;
	}
	if ( /[a-zA-Zа-яА-Я]/.test(itemArtikul)) {
		alert('Артикул должен состоять из чисел');
		return false;
	}
	if ( /[a-zA-Zа-яА-Я]/.test(itemPrice)) {
		alert('Цена должна состоять из чисел');
		return false;
	}
	if (fileType == '') {
		alert('Вы не выбрали файл изображения.');
		return false;
	}
	if (fileType != 'png') {
		alert('Вы выбрали .' + fileType + ' файл.Пожалуйста, выберите файл типа .png');
		return false;
	}
	$.post('app/models/admin.ajax.php', {action : 'checkItem', car_name : carName, model_name : modelName, item_artikul : itemArtikul}, function(data) {
		if (data == 'true') {
			alert('Товар с таким артикулом уже есть!');
		} else {			
			$('#add_item_form').submit();
		}
	});
}
  • Вопрос задан
  • 2937 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
Можно прилично сократить код используя атрибут required
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
metamorph
@metamorph
Ну, для начала вместо последовательных алертов можно собрать все ошибки валидации в одно сообщение и вывести сразу целиком.

Далее, имело бы смысл выделить основные правила валидации в отдельные сущности, а поля формы каким-то образом маркировать (например, data-атрибутами, типа data-required="это поле не заполнено"), чтобы потом просто в цикле пробежаться по форме и все проверить.

Но, кажется, я начинаю описывать устройство плагинов валидации, которые Вам чем-то не угодили.
Ответ написан
Комментировать
@Winner777
Если говорить только об изменении указанного выше js кода, то я бы предложил такое решение:

var items={
	car_name : {
		message : 'Вы не ввели название машины',
		check : function(v) {return v == '- - -' || v == '';}
	},
	articul : {
		message : 'Артикул должен состоять из чисел',
		check : function(v) {return /[a-zA-Zа-яА-Я]/.test(v);}
	}
}

for (item in items) {
	var value=items[item].value=$('#add_item_'+item).val();
	if (items[item].check(value)) {
		alert(items[item].message);
		return false;
	}		
}


ну и дальше значение нужного поля можно получить по items['field_name'].value
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы