1

我有一个带有向上/向下箭头的表单生成器来交换位置。一切正常,只是在进行切换时不会保留在 textarea 或输入字段中键入的任何新输入。

这是向上交换对象的代码

$("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;

   });
4

2 回答 2

1

您真正需要做的就是将整行作为 jQuery 对象移动,而无需在 html 字符串中重建它。使用 jQuery 时,重要的是要了解$(selector)对象包含完整的 DOM 元素,其属性比组成它的 html 更多

$("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;

});
于 2012-11-11T00:18:57.417 回答
0

您会错过这些值,因为它们不是 html() 方法返回的 HTML 代码的一部分。您必须手动重写这些值。尝试将函数的开头更改为:

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;
于 2012-11-10T20:27:43.337 回答