Здравствуйте. Сделал модальное оформление заказа. Если строки не заполнены то появляется ошибка. А вот опции не работают. Если сделать их обязательными все равно пропускает заказ на оформление. Если вывести опцию datatime именно она работает.
Файл вывода в шаблон :
<div id="zapis">
<?php foreach ($opvals as $opval) { ?>
<?php if ($opval['type'] == 'select') { ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label2"><?php echo $opval['name']; ?></label>
<?php if($opval['top']) { ?><?php } ?>
<label class="control-label" for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
<select name="op[<?php echo $opval['product_op_val_id']; ?>]" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2">
<option value=""><?php echo $text_select; ?></option>
<?php foreach ($opval['value'] as $op_value) { ?>
<option value="<?php echo $op_value['option_value_id']; ?>"><?php echo $op_value['name']; ?></option>
<?php } ?>
</select>
</div>
<?php } ?>
<?php if ($opval['type'] == 'radio') { ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label2 "><?php echo $opval['name']; ?></label>
<div id="input-option<?php echo $opval['product_op_val_id']; ?>">
<?php foreach ($opval['value'] as $op_value) { ?>
<div class="radio">
<label>
<input type="radio" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="<?php echo $op_value['option_value_id']; ?>" />
<?php if ($op_value['image']) { ?>
<img src="<?php echo $op_value['image']; ?>" alt="<?php echo $op_value['name']; ?>" class="img-thumbnail" />
<?php } ?>
<?php echo $op_value['name']; ?>
</label>
</div>
<?php } ?>
</div>
</div>
<?php } ?>
<?php if ($opval['type'] == 'checkbox') { ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label2"><?php echo $opval['name']; ?></label>
<div id="input-option<?php echo $opval['product_op_val_id']; ?>">
<?php foreach ($opval['value'] as $op_value) { ?>
<div class="checkbox">
<label>
<input type="checkbox" name="op[<?php echo $opval['product_op_val_id']; ?>][]" value="<?php echo $op_value['option_value_id']; ?>" />
<?php if ($op_value['image']) { ?>
<img src="<?php echo $op_value['image']; ?>" alt="<?php echo $op_value['name']; ?>" class="img-thumbnail" />
<?php } ?>
<?php echo $op_value['name']; ?>
</label>
</div>
<?php } ?>
</div>
</div>
<?php } ?>
<?php if ($opval['type'] == 'text') { ?>
<?php if(($opval['ogr'] > 0) && ($opval['mas'])) { ?>
<input type="hidden" name="q" value="1" data-qq="<?php echo $opval['ogr']; ?>" />
<?php } ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label2" for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
<input type="text" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="" placeholder="<?php echo $opval['text']; ?>" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2" <?php if($opval['top']) { ?>data-validate<?php } ?> />
</div>
<?php if($opval['ogr'] > 0) { ?><?php } ?>
<?php if($opval['mas']) { ?>
<div class="form-group hh-repeatable-field js-repeatable-field__prayer-names-data">
<a href="javascript:void(0)" class="hh-repeatable-field__add-button hh-repeatable-field__add-button-left-margin js-repeater__add-button"><i class="fa fa-plus"></i> Добавить имя</a>
</div>
<?php } ?>
<?php } ?>
<?php if ($opval['type'] == 'textarea') { ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label2" for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
<textarea name="op[<?php echo $opval['product_op_val_id']; ?>]" rows="5" placeholder="<?php echo $opval['text']; ?>" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2"></textarea>
</div>
<?php } ?>
<?php if ($opval['type'] == 'file') { ?>
<?php } ?>
<?php if ($opval['type'] == 'date') { ?>
<div class="form-group <?php if($opval['top']) { ?>required<?php } ?>">
<label class="control-label" for="input-option<?php echo $opval['product_op_val_id']; ?>"><?php echo $opval['name']; ?></label>
<div class="input-group date">
<input type="text" name="op[<?php echo $opval['product_op_val_id']; ?>]" value="" data-date-format="YYYY-MM-DD" id="input-option<?php echo $opval['product_op_val_id']; ?>" class="form-control2" <?php if($opval['top']) { ?>data-validate<?php } ?> />
<span class="input-group-btn">
<button class="btn btn-default" type="button"><i class="fa fa-calendar"></i></button>
</span>
</div>
</div>
<?php } ?>
<?php if ($opval['type'] == 'datetime') { ?>
<?php } ?>
<?php if ($opval['type'] == 'time') { ?>
<?php } ?>
<?php } ?>
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />
<div id="collapse-payment-method"></div>
<div class="buttons">
<div class="pull-center" style="text-align: center;">
<button type="button" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-hoka btn-lg">Отправить</button>
<button type="button" id="button-wishlist" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-hoka btn-lg">В избранное</button>
<input type="hidden" name="s" id="sys" value="0" />
</div>
</div>
</div>
Вот JS для вывода ошибки:
$('#button-cart').on('click', function() {
$('.alert-success, .alert-danger').remove();
$('#sys').val('1');
var field = [];
$("#product").find("input[data-validate]").each(function() {
field.push('input[data-validate]');
var value = $(this).val();
for(var i=0;i<field.length;i++) {
if( !value ) {
$('#sys').val('0');
$(this).addClass('some-form__line-required');
setTimeout(function() {
$(this).removeClass('some-form__line-required')
}.bind(this),2000);
}
}
;
});
if($("input").is('[name=\'q\']')) {
q = Number($('#product input[name=\'q\']').val());
} else {
q = 1;
}
g = q - 1;
t = q;
if(g != 0) {
for (i = 1; i < g; i++) {
zxc = $('#product input[name=\'op[d' + i + ']\']').val();
if(zxc == '') {
$('#product input[name=\'op[d' + i + ']\']').remove();
t = t - 1;
}
}
}
eklmn = $('#sys').val();
if(eklmn != 0) {
$.ajax({
url: 'index.php?route=checkout/cart/add&q=' + t,
type: 'post',
data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
dataType: 'json',
beforeSend: function() {
$('#button-cart').button('loading');
},
complete: function() {
$('#button-cart').button('reset');
},
success: function(json) {
$('.alert, .text-danger').remove();
$('.form-group').removeClass('has-error');
if (json['error']) {
if (json['error']['option']) {
for (i in json['error']['option']) {
var element = $('#input-option' + i.replace('_', '-'));
if (element.parent().hasClass('input-group')) {
element.parent().after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
} else {
element.after('<div class="text-danger">' + json['error']['option'][i] + '</div>');
}
}
}
if (json['error']['recurring']) {
$('select[name=\'recurring_id\']').after('<div class="text-danger">' + json['error']['recurring'] + '</div>');
}
if (json['error']['product']) {
$('.breadcrumb').after('<div class="text-danger">' + json['error']['product'] + '</div>');
}
for (i in json['error']) {
var element = $('#input-payment-' + i.replace('_', '-'));
if ($(element).parent().hasClass('input-group')) {
$(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>');
} else {
$(element).after('<div class="text-danger">' + json['error'][i] + '</div>');
}
}
// Highlight any found errors
$('.text-danger').parent().addClass('has-error');
}
if (json['success']) {
$('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
$('#cart > ul').load('index.php?route=common/cart/info ul li');
$.ajax({
url: 'index.php?route=product/form/payment',
dataType: 'html',
success: function(html) {
$('#zapis').html(html);
$('.user').css('display','block');
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
}
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
} else {
$('#collapse-payment-method').html('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> Есть не заполненые поля ! </div>');
}
});
Помогите ребята а то замучился уже.