2013-08-14 28 views
6

Tôi có một câu lệnh if có hơn 100 câu lệnh if khác nhau.Quản lý một câu lệnh IF lớn trong jQuery

tại im phút sử dụng một cái gì đó tương tự như sau ...

$('select').on("change",function(){ 
    if( $(this).val() === 'tennis') { 
     $('.sport').val('raquet'); 
    } 
    else if( $(this).val() === 'soccer') { 
     $('.sport').val('goal'); 
    } 
    if( $(this).val() === 'snooker') { 
     $('.sport').val('cue'); 
    } 
}); 

Tôi muốn xây dựng một cho các quận trong uk, vì vậy nếu một người sử dụng chọn 'london' trong menu thả xuống, lĩnh vực tiếp theo là dân cư với mã bưu điện cho london.

Vấn đề của tôi là tuy nhiên, tôi có thể xây dựng nó như ví dụ trên của tôi, chỉ có nó sẽ là rất lớn.

Có thể có một số loại tệp xml để thực hiện việc này không? hoặc nó có thể đặt mỗi hạt và giá trị của nó vào một đối tượng bên trong một mảng và nhắm mục tiêu theo cách này không?

Any help is appreciated rất nhiều, nhờ

http://jsfiddle.net/4xQeX/

Trả lời

24

Giải pháp thông thường là để lưu trữ cặp thể thao/đối tượng của bạn như là dữ liệu, bởi vì nó là dữ liệu.

var tbl = { 
    tennis: 'raquet', 
    snooker: 'cue', 
    ... 
}; 

và sau đó sử dụng mã đơn giản này:

$('select').on("change", function(){ 
    var t = tbl[$(this).val()]; 
    if (typeof t === "string") $('.sport').val(t); 
}); 

Bạn thậm chí có thể lấy tbl từ một tập tin JSON riêng biệt (hoặc đơn giản là lưu trữ nó trong tập tin JS khác) để quản lý dễ dàng hơn.

Giả sử bạn muốn sử dụng một tệp JSON riêng biệt, được gọi là things.json, sau đó tập tin của bạn sẽ là như thế này:

{ 
    "tennis": "raquet", 
    "snooker":"cue", 
    ... 
} 

Và mã sẽ là:

var httpRequest = new XMLHttpRequest(); 
httpRequest.onreadystatechange = function() { 
    if (httpRequest.readyState === 4) { 
     if (httpRequest.status === 200) { 
      var tbl = JSON.parse(httpRequest.responseText); 
      $('select').on("change", function(){ 
       var t = tbl[$(this).val()]; 
       if (typeof t === "string") $('.sport').val(t); 
      }); 
     } 
    } 
}; 
httpRequest.open('GET', 'things.json?time='+Date.now()); 
httpRequest.send(); 
+1

Ít nhất sử dụng hasOwnProperty, '__lookupGetter__' hoặc' __proto__' là tên gọi chung cho thể thao – Esailija

+0

@Esailija: 'hasOwnProperty' là sooooo chậm (mặc dù nó có thể không quan trọng ở đây). Ngoài ra, người ta có thể thay thế 'if (t)' bằng 'if (typeof t === 'string')'. –

+1

Đây phải là 15 phiếu bầu nhanh nhất bạn từng nhận được;) –

Các vấn đề liên quan