2016-05-15 3 views
0

На основе некоторых пользовательских входов я хочу отобразить несколько параметров для пользователя (параметры могут быть одиночными или несколькими параметрами от опции-1 до опции-5 или это может быть только ошибка)Скрыть и отобразить определенные элементы внутри ul в JQuery

Мой HTML-код:

<input id="optiondisplay" value="Options" readonly/> 
<ul id="option-list"> 
    <li id="option-1">Option 1</li> 
    <li id="option-2">Option 2</li> 
    <li id="option-3">Option 3</li> 
    <li id="option-4">Option 4</li> 
    <li id="option-5">Option 5</li> 
    <li id="option-error"><b>Error: Invalid input.</b></li> 
</ul> 

Теперь я использую ниже Jquery код для отображения параметров:

case (some input) 
       $('#optiondisplay').show(); 
       $('#option-error').hide(); 
       $('#option-1').hide(); 
       $('#option-2').hide(); 
       $('#option-3').hide(); 
       $('#option-4').show(); 
       $('#option-5').show(); 
       break; 

Однако, как вы все можете увидеть здесь, есть много переписывания кода f или каждый пользовательский ввод (я должен показать некоторые элементы, а также скрыть другие). Есть ли другой способ добиться этого? Спасибо.

Редакция: Входной сигнал от пользователя:

<input type="text" id="from-datepicker"/> 
<input type="text" id="to-datepicker"/> 

Основываясь на разностном между от и до даты, я показываю выше опции.

+0

Что вы собираете пользовательский ввод из, текстовых входов, выберите элемент? – Ryan

+0

Да, конечно, будет путь; однако нам нужна дополнительная информация. Возможно, начните jsfiddle. Кроме того, что является примером того, что вы хотите показать/скрыть на основе выбора? – Cory

+1

Почему бы не использовать несколько селекторов? («# opt1, # opt2, # opt3»). hide(). – Imprfectluck

ответ

1

первый: вы можете использовать что-то вроде

$('#option-1 ,#option-2 , #option-3').hide(); 
$('#option-4 , #option-5').show(); 

второй: вы можете использовать простую функцию, чтобы показать и скрыть параметры, как вам нужно

$(document).ready(function(){ 
 
    // run function with array of options you need to show 
 
    // make this array as you like [0,2] or [3,5] up to you 
 
    // the index starts from 0 
 
    OptionsShowHide([0,3]) 
 
}); 
 

 

 
// function to show what li we need and hide others 
 
function OptionsShowHide(arr){ 
 
    $('li[id^="option-"]').each(function(i){ 
 
    if($.inArray(i , arr) > -1){ 
 
     $(this).show(); 
 
    }else{ 
 
     $(this).hide(); 
 
    } 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="optiondisplay" value="Options" readonly/> 
 
<ul id="option-list"> 
 
    <li id="option-1">Option 1</li> 
 
    <li id="option-2">Option 2</li> 
 
    <li id="option-3">Option 3</li> 
 
    <li id="option-4">Option 4</li> 
 
    <li id="option-5">Option 5</li> 
 
    <li id="option-error"><b>Error: Invalid input.</b></li> 
 
</ul>

+0

Спасибо Mohamaed. Я попробовал 1-й вариант и работал, как и ожидалось. Однако, я вижу, что есть некоторое отставание до того, как будет отображаться новый вывод. Есть ли какая-нибудь работа для этого? –

+0

@nerd В обычном режиме не должно быть никакого запаздывания. Использовать шоу (0) и hide (0) .. 0 среднее время .. если его не работает, значит, отставание не от шоу и скрыть, может быть, что-то еще в вашем коде –

0

Один опрятный способ - использовать селектора css, чтобы скрыть элементы. В основном вы устанавливаете маркер (класс или свойство данных и т. Д.), А затем используйте селектор потомков с :not, чтобы получить нужное поведение. Вот jsfiddle: https://jsfiddle.net/m3316pqj/

В основном, в вашем яваскрипта кода, вы бы выбрать вариант, который вы хотите отобразить пользователь, и сделать что-то вроде этого:

function showOption(number) { 
    $('#option-list li').removeClass('show-me'); // remove any old markers 
    $('#option-list').find('#option-' + number) 
     .addClass('show-me'); // Set the new one 
} 

А затем пусть ваш CSS делать тяжелую работу :

#option-list :not(.show-me) { 
    display: none; 
} 
+0

Вопрос в том, как скрыть/показать ... подробнее о самый простой способ фильтровать элементы в различных случаях ввода. Переключение классов с использованием hide/show не упрощает фильтрацию. – charlietfl

+0

Фактический вопрос заключается в следующем: «Однако, как вы все видите здесь, существует много перекодировки кода для каждого входа пользователя (я должен показать некоторые элементы и также скрыть другие). Есть ли другой способ, которым я могу это достичь? Спасибо.« Предоставленное решение позволяет повторно использовать без необходимости переписывать кучу кода для каждой опции. – AnilRedshift

+0

И вы неверно истолковываете проблему ... OP хочет, чтобы эффективный способ писать различные сценарии фильтрации. – charlietfl

Смежные вопросы