button: $(form).find("input[name='button']").val(),
button: $(form).find("input[name='button']").data('formid'),
<button class="button" data-formid="form1">Отправить</button>
<?php
// самые первые строки файла, пока ничего не выводится в броузер
header('Cache-Control: no-store');
// все остальное
function link($link){
if(is_readable($link)){
return $link.'?'.filemtime($link);
} else if(false===strpos('?',$link)) {
return $link.'?'.rand(1000,99999);
} else
return $link;
}
<link rel="stylesheet" type="text/css" href="<?=link('css/styles.css')?>"...
.bottom-menu {
position: fixed;
bottom: 0;
z-index: 100;
overflow-x: hidden;
height: 82px;
width: 1000px;
left: 50%;
transform: translateX(-50%);
}
Тут вставлено выравнивание по середине фиксированного блока и проставлена абсолютная ширина. Для разных разрешений можно добавить разные svg для для резки..bottom-menu {
clip-path: path("M0 81.99l0 -54.18 457.77 0c6.94,-0.23 11.28,-1.66 13.74,-8.95 8.53,-25.15 48.45,-25.15 56.98,0 2.46,7.29 6.8,8.72 13.74,8.95l457.77 0 0 54.18 -1000 0z");
}
позволяет сделать примерно то же самое. Да и менять контуры для резки меню в медиа-секции станет удобнее.var h=function(){
this.setCustomValidity('');
}
// убираем сообщение об ошибке при начале изменения в поле. Неплохо бы добавить обработку 'paste'
$('input, textarea', form_selector).change(h).on('keydown',h);
function setInvalid(invalid, form) {
// неплохо бы убрать сообщение об ошибке из предыдущей проверки
$('input, textarea', form).trigger(h);
// ставим первое сообщение в списке ошибок
for(var a in invalid){
var i=$('[name="'+a+'"]', form);
if(i.length>0) {
i[0].setCustomValidity(invalid[a]);
i[0].reportValidity();
return;
}
}
// не найдено поля с таким именем - выводим ошибку в специально обученное место
console.log('opps!', invalid);
}
...
success: function(data){
if(data.error){
setInvalid(data.error,form);
return ;
}
}