2012-02-07 92 views
1

我有一個項目列表,我需要記錄它在列表中的位置 - 即排序順序,我正在運行下面的代碼綁定停止事件 - 但有180個字段,這是我的機器上相當慢,可以優化嗎?優化/改善客戶端代碼

$(".survey-fields").bind("sortstop", function(event, ui) { 
     $(".report-field").each(function(i) { 
      $(".sorted-fields").find("#" + $(this).data("field-id")).val(i + 1); 
     }); 
    }); 

代碼解釋: 我可排序的div的列表,每個div有一個id(DB唯一的ID,一個數字),然後我有一個隱藏的另一個列表,我複製了新的位置進入相關字段

在我現在使用字段名稱作爲字符串而不是id之前,不確定是否使它非常緩慢。我有jQuery UI的16年1月8日

<div data-field-id="41" class="display-wrapper report-field"> 
    <div class="field-header field-move"> 
     <span>name: fieldname</span> | <span>max length: 
       100</span><span class="ui-icon ui-icon-carat-2-n-s field-icon field-toggle" title="show/hide details of this field"></span> 
    </div> 
<div> whatever here... 
    </div> 
</div> 

任何其他解決方法,我可以做...基本上,我需要通過ajax要求

回答

0

很難說沒有送ID列表和它們的排序順序我controller適當的分析。這

$(".sorted-fields").find("#" + $(this).data("field-id")) 

可以簡化爲只

$("#" + $(this).data("field-id")) 

因爲ID是(應該是)唯一的文檔範圍。另一個想法:如果你反正使用ajax,填充表單字段有什麼意義?爲什麼不使用一個簡單的對象,它可以發送到json服務器。像

var sortOrder = {} 

    $(".report-field").each(function(i) { 
     sortOrder[$(this).data("field-id")] = i + 1; 
    }); 
+0

如果我想發送字段id與其位置一起,我將如何填充json? – Haroon 2012-02-07 16:18:28

+0

這就是上面的代碼所做的。 – georg 2012-02-07 16:19:22