<div>
<table></table>
</div>
div { overflow-x: auto;}
pointer-events: none;
который, как говорят, и был придуман в свое время для svg.pointer-events: none;
//высота шапки
var head_height = 50;
//ждем проверку на инвалидность
document.addEventListener('invalid', (function(){
//флаг только для первого сообщения о неверных данных
var is_first = true;
return function(e){
if(is_first){
is_first = false;
setTimeout(function(){
//сбрасываем is_first чтобы еще раз можно было отправить пустые данные
is_first = true;
//верх лейбла инпута на странице экрана
var etop = $(e.target).prev("label").offset().top;
//верх лейбла относительно видимой части страницы
var top = etop - $(window).scrollTop();
//если верхушка скрывается за пределами экрана и шапки, то скролим к лейблу
if (top < head_height) {
window.scrollTo(0, etop - head_height);
}
}, 9);
}
};
})(), true);
$(".img").hover(function () {
$(this).parent().closest('.parent').addClass('hover');
});
$('.parent').on('mouseleave', function () {
$(this).removeClass('hover');
});
$('.hover').on('mouseleave', function(){
$(this).removeClass('hover');
});
// не надо так
// $(this).parent().closest('.parent').addClass('hover');
// вот так можно
$(this).parents('.parent').addClass('hover');
watch: {
options: {
livereload: true
},
gruntfile: {
files: ['Gruntfile.js'],
tasks: ['build:dev']
},
js: {
files: '<%= path.assets %>/javascripts/{,**/}*.js',
tasks: 'concat'
},
compass: {
files: '<%= path.assets %>/stylesheets/{,**/}*.{scss,sass}',
tasks: ['compass:dev', 'autoprefixer']
},
jade: {
files: '<%= path.assets %>/views/{,**/}*.jade',
tasks: ['jade:dev']
}
}
<script src="//localhost:35729/livereload.js"></script>