2016-09-28 2 views
0

Я ничего не знаю о javascript. Я просто нашел этот фрагмент в Интернете, когда пытался найти решение о том, как добиться того, что мне нужно. Есть ли способ упростить это, так как я буду добавлять около 40 элементов, которые мне нужно показать и скрыть.Как я могу упростить эту функцию выбора?

var $selects = $('.filters select'); 
    $selects.on('change', getValues).first().trigger("change"); 
    function getValues() { 
    var vals = $selects.map(function() { 
     return this.value; 
    }).get(); 
    if (vals.join('') === "a1b2c3") { 
     $(".box_wrapper").not(".a1b2c3").hide(); 
     $(".a1b2c3").show(); 
     $('html,body').animate({ 
     scrollTop: $(".a1b2c3").offset().top}, 
     'slow'); 
    } 
    else if (vals.join('') === "d4e5f6") { 
     $(".box_wrapper").not(".d4e5f6").hide(); 
     $(".d4e5f6").show(); 
     $('html,body').animate({ 
     scrollTop: $(".d4e5f6").offset().top}, 
     'slow'); 
    } 
    else{ 
     $(".vid_box").hide(); 
    } 
} 

Я думаю, что я могу упростить это дальше, получая соединяемых значения из полей выбора и использовать его на функцию выше, и поскольку я использую ту же самую комбинацию значений для данного класса. Я просто не знаю, как это сделать. Это возможно? Спасибо заранее, ребята!

+0

этот код работает? –

+0

Как насчет использования переключателя/корпуса? – phreakv6

+0

Можете ли вы показать нам свой html –

ответ

0

Вот мой окончательный код. Спасибо @MJH за помощь.

var $selects = $('.filters select'); 
    $selects.on('change', getValues).first().trigger("change"); 
    function getValues() { 
    var $selects = $('.filters select'); 
    $selects.on('change', getValues).first().trigger("change"); 
    function getValues() { 
    var vals = $selects.map(function() { 
     return this.value; 
    }).get(); 
    var vwarp = vals.join(''); 
    if (vwarp == vwarp) { 
     $(".box_wrapper").not("." + vwarp).hide(); 
     $("." + vwarp).show(); 
     $('html,body').animate({ 
     scrollTop: $("." + vwarp).offset().top}, 
     'slow'); 
    } 
    else{ 
     $(".box_wrapper").hide(); 
    } 
} 

Надеюсь, это поможет!

0

Возможно, что-то вроде этого (код воздуха):

var $selects = $('.filters select'); 
$selects.on('change', getValues).first().trigger("change"); 
function getValues() { 
    var vals = $selects.map(function() { 
     return this.value; 
    }).get(); 

    var values = [ "a1b2c3", "d4e5f6" ]; 

    var vj = vals.join(''); 

    if (values.indexOf(vj) !== -1) { 
     $(".box_wrapper").not("." + vj).hide(); 
     $("." + vj)).show(); 
     $('html,body').animate({ 
      scrollTop: $("." + vj)).offset().top 
     }, 'slow'); 
    } 
    else { 
     $(".vid_box").hide(); 
    } 
} 
+0

Следуя вашему примеру, мне удается упростить его, но у меня есть функция «Ошибка отображения типа« нечистота »в функции scrolltop, если я использую:' $ ('html, body') .animate ({ scrollTop: $ ("." + vj)). offset(). top }, 'slow'); ' У меня нет ошибки, хотя если я просто использую обычный таргетинг на класс. – vancespago

+0

Ну, я сказал, что это воздушный код. Что вы получите, если вы введете 'vj' в консоль в блоке' if'? Это то же самое, что и нормальное значение класса? – MJH

+0

Не совсем уверен, как это сделать. Можете ли вы сказать мне точную команду, которую я должен вводить на консоли браузера? Сожалею. – vancespago

0

Я хотел бы предложить что-то вроде этого.

var $selects = $('.filters select'); 

$selects.on('change', function() { 

    var value = $selects.map(function() { 
     return this.value; 
    }).get(); 

    $(".box_wrapper").not("." + value).hide(); 
    $(".box_wrapper." + value).show(); 
    $('html, body').animate({ 
    scrollTop: $("." + value).offset().top}, 
    'slow'); 
}); 

$selects.first().trigger("change"); 
Смежные вопросы