2014-10-02 23 views
1

我在一些javascript中有一個switch case語句,然後需要運行相同的.each函數,只需要更改一個參數。如何抽象出這個.each函數?

$('#item_type').change(function() { 
     switch(this.value) { 
      case 'CH': 
       $('#item_code').empty(); 
       $.each(cheeses, function(key, value) { 
        $('#item_code') 
        .append($("<option></option>") 
        .attr("value",key) 
        .text(value)); 
       }); 
       break; 

      case 'Z': 
       $('#item_code').empty(); 
       $.each(sizes, function(key, value) { 
        $('#item_code') 
        .append($("<option></option>") 
        .attr("value",key) 
        .text(value)); 
       }); 
       break; 
     } 

    }); 

我如何可以改變的事情,這樣的.each函數只被定義一次,並且可以只被稱爲的各類案件中,這樣的事情:

case 'CH': 
    $('#item_code').empty(); 
    doEach(cheeses); 
    break; 
case 'Z': 
    $('#item_code').empty(); 
    doEach(sizes); 
    break; 
+2

'函數doEach(集合){$。每個(收集,...); }'。 – dfsq 2014-10-02 21:26:02

+0

謝謝,那是我所需要的。如果您發佈答案,我會接受。 – EmmyS 2014-10-02 21:31:09

回答

1

非常簡單的方法是:

function doEach(collection) { 
    $.each(collection, function(key, value) { 
     $('#item_code') 
      .append($("<option></option>") 
      .attr("value",key) 
      .text(value)); 
    }); 
} 

,或者你可以用很簡單的插件去:

$.fn.populate = function (collection) { 
    return this.each(function() { 
     var $self = $(this).empty(); 
     $.each(collection, function (key, value) { 
      $('<option>').attr('value', key).text(value).appendTo($self); 
     }); 
    }); 
}; 

$('#item_type').change(function() { 
    switch (this.value) { 
     case 'CH': 
      $('#item_code').populate(cheeses); 
      break; 

     case 'Z': 
      $('#item_code').populate(sizes); 
      break; 
    } 
}); 
3

您可以將每個功能一個變量,然後將它傳遞給.each像這樣:

var addOptions = function(key, value) { 
       $('#item_code') 
       .append($("<option></option>") 
       .attr("value",key) 
       .text(value)); 
      }; 

$('#item_type').change(function() { 
    switch(this.value) { 
     case 'CH': 
      $('#item_code').empty(); 
      $.each(cheeses, addOptions); 
      break; 

     case 'Z': 
      $('#item_code').empty(); 
      $.each(sizes, addOptions); 
      break; 
    } 

}); 

祝你好運!