2016-05-15 9 views
0

いくつかのユーザー入力に基づいて、いくつかのオプションをユーザーに表示することができます(オプションはオプション1からオプション5の単一または複数のオプションです。エラーは)JQueryのul内の特定の要素を隠して表示する

私の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の書き換えまたは各ユーザーが入力する(私はいくつかの要素を表示し、他の人を隠す必要があります)。 これを実現する方法は他にありますか?おかげさまで

EDITED:ユーザーからの入力:、開始日と終了日の間diffrenceに基づいて

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

、私は上記のオプションを示しています。

+0

を必要に応じてオプションを表示し、非表示にする簡単な関数を使用することができますか? – Ryan

+0

はい、確かに道があります。しかし、より多くの情報が必要です。たぶんjsfiddleを開始します。また、選択に基づいて表示/非表示にしたいものの例は何ですか? – Cory

+1

なぜ複数のセレクタを使用しないのですか? like( "#opt1、#opt2、#opt3")。hide()。 – Imprfectluck

答えて

1

あなたが

$('#option-1 ,#option-2 , #option-3').hide(); 
$('#option-4 , #option-5').show(); 
のようなものを使用することができます3210

第二:あなたは、あなたが何をしてからのユーザ入力を収集し、テキスト入力、select要素されている

$(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

ありがとうモハマド。 そのための回避策はありますか? –

+0

@nerd通常であれば、show(0)を使用するのに遅れてはいけません.try hide(0).. 0 mean time ..もしそれが動かないならば、あなたのコード内の何か他のものを表示したり隠したりするのではなく –

0

1つのきれいな方法は、CSSセレクタを使用して要素を非表示にすることです。基本的には、マーカ(クラス、データプロパティなど)を設定してから、子孫セレクタを:notで使用して、必要な動作を取得します。ここにjsfiddleです:https://jsfiddle.net/m3316pqj/

基本的には、あなたのjavascriptのコードでは、あなたがユーザーに表示し、このような何かをしたいオプション選ぶだろう:

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

関連する問題