2012-05-10 11 views
2

私のスクリプトは動作していますが、現在はボタン入力を使用していますが、これを選択ボックス入力に変更したいのですが、コードはまったく動作しないようです。ボタンを選択ボックスコードに変更する

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 


<script type="text/javascript" src="jquery.js"></script>   
<script type="text/javascript"> 
$(function() { 
var fuel = ''; // Keep track of selections 
var drive = ''; 
var type = ''; 
$('#fuel button').click(function() { // Choose a fuel 
    fuel = (this.id ? '.' : '') + this.id; 
    selectModels(); 
}); 
$('#drive button').click(function() { // Choose a drive 
    drive = (this.id ? '.' : '') + this.id; 
    selectModels(); 
}); 
$('#type button').click(function() { // Choose a colour 
    type = (this.id ? '.' : '') + this.id; 
    selectModels(); 
}); 
function selectModels() { // Select matching models 
    $('div.modelContainer').hide(). // Hide all 
     filter((fuel + drive + type) || '*').show(); // Show matches 
} 
}); 
</script> 
</head> 
<body> 
<div id="fuel" class="controller"> 
<span class="controllerLabel">fuel:</span> 
<button>All</button> 
<button id="petrol">petrol</button> 
<button id="diesel">diesel</button> 
</div> 
<div id="drive" class="controller"> 
<span class="controllerLabel">drive:</span> 
<button>All</button> 
<button id="man">manual</button> 
<button id="auto">auto</button> 

</div> 
<div id="type" class="controller"> 
<span class="controllerLabel">type:</span> 
<button>All</button> 
<button id="car">car</button> 
<button id="4">4x4</button> 
<button id="7">people</button> 
<button id="van">van</button> 

</div> 



<div class="modelContainer petrol manual car"> 

pmc 

</div> 

<div class="modelContainer petrol manual 4"> 

pm4 

</div> 



<div class="modelContainer petrol auto car"> 

pac 

</div> 


<div class="modelContainer diesel manual car"> 

dmc 

</div> 



<div class="modelContainer diesel manual van"> 

dmv 

</div> 

<div class="modelContainer diesel auto car"> 

dac 

</div> 

<div class="modelContainer diesel auto 4"> 

da4 

</div> 

<div class="modelContainer diesel auto 7"> 

da7 

</div> 

<div class="modelContainer diesel auto 7 4"> 

sor 

</div> 
</body> 
</html> 

、そこに大幅に改善される必要があり、この問題の多くは、ですが、これはあなたにすぐに結果を与える必要があります

<div id="fuel" class="controller"> 
<span class="controllerLabel">fuel:</span> 
<select> 
<option value="all">all</option> 
<option value="petrol">petrol</option> 
<option value="diesel">diesel</option> 
</select> 
</div> 

おかげ

+0

値は数値であることが想定されていません。 – Sampson

答えて

2

に「燃料」のボタンを変更する:

$('#fuel select').on("change", function() { 
    fuel = (this.value ? '.' : '') + this.value; 
    selectModels(); 
}); 

他のselect要素についても同じことを繰り返す必要があります。さらにいくつかの変更を伴う

更新:

将来的にあなたにいくつかの不満を引き起こす可能性があり、このコードにはいくつかの問題があります。私はそれを少し書き直す自由を取った。改善の余地がまだあるかもしれませんが、より簡単に処理して理解できるものに一歩近づくと思います。

フィルタリング可能な条件のすべてを、複数の変数ではなく単一のオブジェクト内に格納することから始めます。これは、値をプッシュして引っ張る場所を1つ与えます。

var fType = { 'fuel' : 'all', 'drive' : 'all', 'type' : 'all' }; 

次に、定義済みのCSSセレクタ内でキーワードを見つける小さな正規表現パターンを作成します。関数partsMapperは、正規表現が検出したキーワードを上記のfTypeオブジェクトの実際の値と置き換える役割を担います。

var partsRegex = /([a-z]+)/g; 

function partsMapper (s, p) { 
    return fType[p]; 
} 

次の我々はより簡単に、すべて1つの場所からその変更イベントをキャプチャすることができるように、私は単一<div class='controller'>にあなたのselectすべての要素をグループ化してきました。

$(".controller").on("change", "select", function(){ 

ときselect火災の変更イベント、.controllerの中から、私たちはfTypeオブジェクトで、その変更イベントの値を更新することにより開始しています。したがって、#fuelが変更された場合は、fType[fuel]を新しい値に更新します。

私たちのfTypeオブジェクトを新しく更新して、項目のリストを更新することができます。私たちはすべてのリスト項目を隠すことから始めます(ええ、私もここで再構成しました)。次に、.fuel.drive.typeセレクタと一致するリスト項目のみを選択します。ここでは、それぞれのキーワードが検索され、正規表現/関数のコンボで置き換えられ、fTypeオブジェクトの現在の値と置き換えられます。

fType.fuel"petrol"の場合、セレクタは.petrolで始まります。すべての基準はデフォルトで"all"に設定されていますので、#fuelpetrolに変更するとすぐにセレクタは.petrol.all.allになり、すべて.petrolのアイテムが表示されます。

// Update filtered items 
    $(".modelList li") 
    .hide() 
    .filter('.fuel.drive.type'.replace(partsRegex, partsMapper)) 
    .show(); 

最後に、$.onメソッドを閉じます。

}); 

デモ: `id`のhttp://jsbin.com/imezez/edit#javascript,html

+0

ありがとう、ありがとう、ありがとう、私はコードがちょっとわかりやすいことを知っています。私のto-doリストの次のものは、最初に動作させたかっただけです。 – user1385301

+0

@ user1385301私はこの回答を大きく更新しました。新しいコードと機能的なデモをお届けします。ご不明な点がございましたら、お気軽にお読みください。 – Sampson

+0

本当にありがとうございました! – user1385301

関連する問題