2017-05-12 19 views
0

私はいくつかのケースを持つswitch文を持っています。これらのケースは値を比較し、テキストを変数に代入します。しかし、このスイッチを実行しようとすると、常にデフォルトのケースが実行されます。しかし、私の状態は本当です。なぜですか?ここで スイッチがjavascriptで正しく動作していない

Apartment 
ここ

var rental_cat = $('#rentals_type').val(); 
alert(rental_cat); 
var rental_type = ""; 
switch (rental_cat) { 
case (rental_cat == "Apartment"): 
    rental_type='daily'; 
    alert(rental_type); 
    break; 
case (rental_cat == "Office"): 
    rental_type='work_daily'; 
    alert(rental_type); 
    break; 
default: 
    rental_type='other'; 
    alert(rental_type); 
    break; 
} 

私は、このスイッチを実行が、それはいつも私を与える私のコードで私の値である ""

+0

あなたが得たjavascriptのスイッチの構文正しいとは思わない:https://www.w3schools.com/js/js_switch.asp – Mosd

答えて

3

削除"case"句の中の条件式。

これを試してみてください:

var rental_cat = $('#rentals_type').val(); 

    alert(rental_cat); 

    var rental_type = ""; 

    switch (rental_cat) { 

    case "Apartment": 
             rental_type='daily'; 
             alert(rental_type); 
             break; 

    case "Office": 
             rental_type='work_daily'; 
             alert(rental_type); 
             break; 

    default: 
             rental_type='other'; 
             alert(rental_type); 
             break; 
} 
+0

解決されていない..!それはまた、 "他の"アラートを返します –

+1

@AshishVyas多分あなたは[trim()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)の入力をする必要があります? – Thomas

+1

こんにちは@AshishVyas、それは私のために働いています。あなたはここで確認することができますhttps://jsfiddle.net/pablodarde/wg1wdcd7/ –

0
switch (rental_cat) { 
    case (rental_cat == "Apartment"): 

が順番にあなたがcaseに条件を入れていない

if (rental_cat === true) 

と同等です

switch (rental_cat) { 
    case true: 

に相当します、条件はクレアswitchcase sの間の等価性チェックなどテッド、それは代わりに、このようにする必要がありますので:

switch (rental_cat) { 
    case "Apartment": 
0

スイッチは、この問題に対処するための権利構造ではありません。ここで私は、マップをお勧めします:

var rentalTypesByCat = { 
    DEFAULT:  "other", 

    "Apartement": "daily", 
    "Office":  "work_daily", 
} 

var rental_cat = $('#rentals_type').val(); 
console.log("rental_cat:", rental_cat); 

var rental_type = rentalTypesByCat[rental_cat] || rentalTypesByCat.DEFAULT; 
console.log("rental_type:", rental_type); 

またはあなたがそれを必要とする場合は、もう少し明示的に(例えば、あなたのマップされた値のいくつかは、それ自体falsyかもしれないので):

var rental_type = rentalTypesByCat[rental_cat in rentalTypesByCat? rental_cat: "DEFAULT"]; 
console.log("rental_type:", rental_type); 
関連する問題