2010-04-23 30 views
35

Tôi có viết đúng vỏ chuyển đổi không?Chuyển vỏ máy có điều kiện

var cnt = $("#div1 p").length; 
       alert(cnt); 
       switch (cnt) { 
        case (cnt >= 10 && cnt <= 20): 
         alert('10'); 
         break; 
        case (cnt >= 21 && cnt <= 30): 
         alert('21'); 
         break; 
        case (cnt >= 31 && cnt <= 40): 
       alert('31'); 
         break; 
        default: 
         alert('>41'); 
       } 

Vì lý do nào đó, cảnh báo sẽ không xảy ra khi các điều kiện được khớp!

+3

Bạn đã nghe nói về nếu ... elseif ... else statement? – rochal

+1

IMO câu trả lời đúng cho câu hỏi này nhận được phiếu bầu ít nhất. Xem câu trả lời của Fabien Ménager. Điều này nên là một trong những quyền. Viết loại mã này bằng cách sử dụng công tắc có thể đọc được nhiều hơn so với sử dụng câu lệnh if else. Cá nhân tôi sử dụng cái này trong những tình huống như thế này. – Foreever

Trả lời

26

Bạn không nên sử dụng switch cho trường hợp này. Đây là phương pháp thích hợp:

var cnt = $("#div1 p").length; 

alert(cnt); 

if (cnt >= 10 && cnt <= 20) 
{ 
    alert('10'); 
} 
else if (cnt >= 21 && cnt <= 30) 
{ 
    alert('21'); 
} 
else if (cnt >= 31 && cnt <= 40) 
{ 
    alert('31'); 
} 
else 
{ 
    alert('>41'); 
} 
+12

Không có gì sai khi sử dụng chuyển đổi trong trường hợp này. Tôi thích chuyển qua nếu khác cho việc này. – Foreever

+7

"Bạn không nên sử dụng chuyển đổi cho trường hợp này" ** Tại sao? ** – Fr0zenFyr

7

Điều bạn đang làm là tìm kiếm (0) hoặc (1) kết quả.

(cnt> = 10 & & cnt < = 20) trả về giá trị đúng hoặc sai.

--edit-- bạn không thể sử dụng trường hợp với các thử nghiệm boolean (logic). Câu lệnh cnt> = 10 trả về số không cho false hoặc một cho true. Do đó, nó sẽ trường hợp (1) hoặc trường hợp (0) mà sẽ không bao giờ phù hợp với chiều dài. --edit--

+1

Andy bạn có thể có một điểm ở đây mà tôi cld không làm theo..mind rewording đó? tôi đang làm gì vậy? – Jasl

+0

bạn không thể sử dụng trường hợp với các thử nghiệm boolean (logic).Câu lệnh cnt> = 10 trả về số không cho false hoặc một cho true. Do đó, nó sẽ trường hợp (1) hoặc trường hợp (0) mà sẽ không bao giờ phù hợp với chiều dài. – jAndy

+0

thông tin bổ sung về 'switch()' http://www.w3schools.com/js/js_switch.asp – Reigel

22

này nên làm việc với điều này:

var cnt = $("#div1 p").length; 

      switch (true) { 
       case (cnt >= 10 && cnt <= 20): 
        alert('10'); 
        break; 
       case (cnt >= 21 && cnt <= 30): 
        alert('21'); 
        break; 
       case (cnt >= 31 && cnt <= 40): 
        break; 
       default: 
        alert('>41'); 
      } 
+1

Tôi không nói đây là mã tốt;) Và chuyển đổi cho phép điều này. Điều này giống như khi bạn viết 'if (2 == myVar)' –

+3

Không có gì sai với câu lệnh switch đó và nó chính xác như dự định. Đã dịch, bạn đang hỏi "Hãy cho tôi câu" đúng "và thực hiện mã này cho nó. Cá nhân tôi thích báo cáo chuyển đổi tốt hơn so với cụm từ if..else if .. statements. –

+1

Bạn nên thay thế> = 21 bằng> 20 và cứ tiếp tục như vậy. – Haradzieniec

82

Một chuyển đổi hoạt động bằng cách so sánh những gì có trong switch() cho mọi case.

switch (cnt) { 
    case 1: .... 
    case 2: .... 
    case 3: .... 
} 

công trình thích:

if (cnt == 1) ... 
if (cnt == 2) ... 
if (cnt == 3) ... 

Do đó, bạn không thể có bất kỳ logic trong các báo cáo trường hợp.

switch (cnt) { 
    case (cnt >= 10 && cnt <= 20): ... 
} 

công trình như

if (cnt == (cnt >= 10 && cnt <= 20)) ... 

và đó chỉ là vô nghĩa. :)

Thay vào đó hãy sử dụng if() { } else if() { } else { }.

+0

giải thích tốt, cảm ơn –

+0

không thể đồng ý hơn với phần '' '' vô nghĩa'''' – Jay

10

Something tôi đi theo trong khi cố gắng làm việc một spinner là cho phép sự linh hoạt trong kịch bản mà không cần dùng một tấn nếu báo cáo.

Vì đây là một giải pháp đơn giản hơn việc lặp qua một mảng để kiểm tra một cá thể của một lớp trình bày nó giữ cho trình làm sạch tập lệnh. Bất kỳ đề nghị để làm sạch mã tiếp tục được chào đón.

$('.next').click(function(){ 
     var imageToSlide = $('#imageSprite'); // Get id of image 

     switch(true) { 
      case (imageToSlide.hasClass('pos1')): 
       imageToSlide.removeClass('pos1').addClass('pos2'); 
       break; 
      case (imageToSlide.hasClass('pos2')): 
       imageToSlide.removeClass('pos2').addClass('pos3'); 
       break; 
      case (imageToSlide.hasClass('pos3')): 
       imageToSlide.removeClass('pos3').addClass('pos4'); 
       break; 
      case (imageToSlide.hasClass('pos4')): 
       imageToSlide.removeClass('pos4').addClass('pos1'); 
     } 
    }); ` 
1

Chuyển trường hợp là mỗi giúp đầy đủ thay vì câu lệnh if khác:

 switch ($("[id*=btnSave]").val()) { 
     case 'Search': 
      saveFlight(); 
      break; 
     case 'Update': 
      break; 
     case 'Delete': 
      break; 
     default: 
      break; 
    } 
3
function date_conversion(start_date){ 
    var formattedDate = new Date(start_date); 
    var d = formattedDate.getDate(); 
    var m = formattedDate.getMonth(); 
    var month; 
    m += 1; // JavaScript months are 0-11 
    switch (m) { 
     case 1: { 
      month="Jan"; 
      break; 
     } 
     case 2: { 
      month="Feb"; 
      break; 
     } 
     case 3: { 
      month="Mar"; 
      break; 
     } 
     case 4: { 
      month="Apr"; 
      break; 
     } 
     case 5: { 
      month="May"; 
      break; 
     } 
     case 6: { 
      month="Jun"; 
      break; 
     } 
     case 7: { 
      month="Jul"; 
      break; 
     } 
     case 8: { 
      month="Aug"; 
      break; 
     } 
     case 9: { 
      month="Sep"; 
      break; 
     } 
     case 10: { 
      month="Oct"; 
      break; 
     } 
     case 11: { 
      month="Nov"; 
      break; 
     } 
     case 12: { 
      month="Dec"; 
      break; 
     } 
    } 
    var y = formattedDate.getFullYear(); 
    var now_date=d + "-" + month + "-" + y; 
    return now_date; 
} 
Các vấn đề liên quan