2012-11-10 35 views
1

我有一個表格生成器,上/下箭頭交換位置。除了在製作交換機時,在textarea或輸入字段中鍵入的任何新輸入不會保留,所有內容都可以正常工作。用jquery交換輸入元素,而不是保留值

這裏的交換對象向上

$("a.move-up").live('click', function() { 
     var xvalue = $(this).attr("xvalue"); 
     var this_row = $("tr#row-" + xvalue).html(); 
     this_row = "<tr id='row-" + xvalue + "'>" + this_row + "</tr>"; 


     var position = $("table#input-table tr").index($('tr#row-' + xvalue)); 
     position++; 

     var prev_position = position - 1; 

     $("#input-table tr:nth-child(" + position + ")").remove(); 
     $(this_row).insertBefore("#input-table tr:nth-child(" + prev_position + ")"); 

     //alert(this_row); 


     return false; 

    }); 
+0

你能添加一些html嗎?看起來你正在做很多不必要的html更改。 (刪除和重新添加可能是什麼殺死你的輸入值) – Yoshi

回答

0

你,因爲他們是不是由HTML()方法返回的HTML代碼的一部分懷念那些數值的代碼。您必須手動重寫這些值。嘗試你的函數的beginnig更改爲類似:

var this_row = $("tr#row-" + xvalue); 
var new_row = "<tr id='row-" + xvalue + "'>" + this_row.html() + "</tr>"; 
this_row.find("input[type=text], textarea").each(function(index){ 
    $(new_row.find("input[type=text], textarea")[index]).val($(this).val()); 
}); 
this_row = new_row; 
1

你真正需要做的是移動整個行作爲一個jQuery對象,而無需重建它在HTML字符串。當使用jQuery明白,$(selector)對象包含了許多比,使得它的HTML更多屬性的完整DOM元素是非常重要的

$("a.move-up").live('click', function() { 
    var xvalue = $(this).attr("xvalue"); 
    var this_row = $("tr#row-" + xvalue) 
    var prev_row = this_row.prev(); 
    this_row.inserBefore(prev_row); 

    return false; 

}); 

如果move-up按鈕是行內你可以用一個簡單的橫向,以確定當前行和簡化代碼更多

$("a.move-up").live('click', function() { 

    var this_row = $(this).closest('tr') 
    var prev_row = this_row.prev(); 
    this_row.inserBefore(prev_row); 

    return false; 

});