2015-03-31 27 views
0

是否可以合併以下兩段代碼。如果你看看每一節,你會發現它們幾乎完全相同。我還有另外3或4段代碼也是相同的。我想知道是否有更好的方法可以使用相同的代碼?jQuery將代碼合併到一個函數中

$("#agencies").on("click", ".applyClick", function(event) { 
    event.stopPropagation(); 
    event.preventDefault(); 
    var target = $(this); 
    var currentParent = $(this).closest('tr'); 
    var id = currentParent.attr('id'); 
    var items = $("input,select,textarea", currentParent); 
    var strData = items.serialize() + '&id=' + id; 
    $.post("agencies.php", strData, function(data) { 
     var data = $.parseJSON(data); 

     if(data.redirect_location){ 
      window.location = data.redirect_location; 
     } 
     else{ 
      var type = data.type; 
      var result = $.map(data, function(val,index) { 
       if(index != 'type'){ 
        var str = val; 
       } 
       return str; 
      }).join("<br>"); 

      if(type == 'error'){ 
       alert(result); 
      } 
      else{ 
       $("div#messages").html('<div class="'+ type +'-message">' + result + '</div>').slideDown("slow"); 
       closeRow('quit', target); 
      } 
     } 
    }); 
}); 

$("#builders").on("click", ".applyClick", function(event) { 
    event.stopPropagation(); 
    event.preventDefault(); 
    var target = $(this); 
    var currentParent = $(this).closest('tr'); 
    var id = currentParent.attr('id'); 
    var items = $("input,select,textarea", currentParent); 
    var strData = items.serialize() + '&id=' + id; 
    $.post("builders.php", strData, function(data) { 
     var data = $.parseJSON(data); 

     if(data.redirect_location){ 
      window.location = data.redirect_location; 
     } 
     else{ 
      var type = data.type; 
      var result = $.map(data, function(val,index) { 
       if(index != 'type'){ 
        var str = val; 
       } 
       return str; 
      }).join("<br>"); 

      if(type == 'error'){ 
       alert(result); 
      } 
      else{ 
       $("div#messages").html('<div class="'+ type +'-message">' + result + '</div>').slideDown("slow"); 
       closeRow('quit', target); 
      } 
     } 
    }); 
}); 
+2

這更多的是比具體的基於代碼的問題,代碼審查。 – Utkanos 2015-03-31 12:23:52

+1

把一個常用的功能來處理你的代碼,並從每次點擊呼叫。 – LMK 2015-03-31 12:25:46

回答

1

我會推薦將屬性這樣

<input type="button" data-url="agencies" id="agencies" /> 
<input type="button" data-url="builders.php" id="builders" /> 

和相同的代碼添加到您的按鈕,這樣

$("#agencies, #builders").on("click", ".applyClick", function(event) { 
    var url = $(this).attr('data-url'); 
    .... 
    $.post(url, strData, function(data) { 
    ... 
    ... 
}); 
0

這個問題是在代碼審查和SO的邊緣。

這兩個處理程序之間的唯一區別似乎是.post URL,它似乎可以從單擊目標的ID中派生出來。

所以,做一個小字符串處理建立的網址,並附上您的修改功能單擊處理這兩個元素:

$("#agencies, #builders").on("click", ".applyClick", function(event) { 
    ... 
    $.post(this.id + '.php', strData, function(data) { 
    ... 
} 
相關問題