Проблема здесь
if (h >= v) {
$('.option_short').addClass('active').next('.option_detail').stop().slideDown(300);
$(this).text('Свернуть все');
} else {
$('.option_short').removeClass('active').next('.option_detail').stop().slideUp(300);
$(this).text('Развернуть все');
};
в условии стоит не строгое неравенство и когда 2 = 2 у вас все блоки раскрываются.
Попробуй вот так
var hideAll = false;
$('.option_view-all').on('click', function(){
var h = $('.option_short').next('.option_detail:hidden').length;
console.log('hidden = ' + h);
var v = $('.option_short').next('.option_detail:visible').length;
console.log('visible = ' + v);
console.log(hideAll);
if (!hideAll) {
$('.option_short').addClass('active').next('.option_detail').stop().slideDown(300);
$(this).text('Свернуть все');
hideAll = true;
} else {
$('.option_short').removeClass('active').next('.option_detail').stop().slideUp(300);
$(this).text('Развернуть все');
hideAll = false;
};
return false;
});
$('.option_short').on('click', function(){
$(this).toggleClass('active').next('.option_detail').stop().slideToggle(300);
if ($('.option_short').next('.option_detail:hidden').length == 0) {
$('.option_view-all').text('Свернуть все');
hideAll = true;
console.log('hid = ' + $('.option_short').next('.option_detail:hidden').length);
} else if ($('.option_short').next('.option_detail:visible').length == 1) {
$('.option_view-all').text('Развернуть все');
hideAll = false;
console.log('vis = ' + $('.option_short').next('.option_detail:visible').length);
};
return false;
});