2012-03-16 15 views
0

私はこれを全部見てきましたが、運があまりありませんでした。jQueryの行の変更とID

ので、このコードを与えられた:アップ/ダウンボタンをクリックしたときに

$("span[id*=Section]").click(function(){ 
    var row = $(this).parents("tr.MoveableRow:first"); 
    if ($(this).is(".up_button")) { 
     row.insertBefore(row.prev()); 
     section = this.id; 
     $("input[name='" + section + "']").val(row.closest("tr").prevAll("tr").length + 1); 
    } else { 
     row.insertAfter(row.next()); 
     section = this.id; 
     $("input[name='" + section + "']").val(row.closest("tr").prevAll("tr").length + 1); 
    } 
}); 

は現在、TRは上に移動するか、期待通りにダウン。 "input [name =" part]は、渡されたスパンIDの値を受け取り、その値をそのTR内の隠しフィールドに割り当てます。

これが何をしているのかは、私に重複IDを与えていることです。たとえば、2行目を1行目に移動します。古い行2の隠れた入力値は1になりますが、元の1の非表示入力も1になります。

だから私ができることは、 1、新しい2

+0

[JS Fiddle](http://jsfiddle.net/)でこれを再現できますか? –

+0

他の行の値を変更しているようではありません。何か不足していますか? –

答えて

0

あなたは移動した行に対して同じことをしないでしょうか? (そして、あなたがアップで同じことをやっているし、場合によってダウン、あなたのコードビットを簡素化することができますので)

$("span[id*=Section]").click(function(){ 
    var row = $(this).parents("tr.MoveableRow:first"); 
    if ($(this).is(".up_button")) { 
     row.insertBefore(row.prev()); 
    } else { 
     row.insertAfter(row.next()); 
    } 

    $("input[name='" + this.id + "']").val(row.closest("tr").prevAll("tr").length + 1); 
    $("input[name='" + row[0].id + "']").val(row.closest("tr").prevAll("tr").length + 1); 
}); 

また、おそらく.index()を使用することができますが、私はあなたのHTMLがどのように見えるか分かりません。

$("span[id*=Section]").click(function(){ 
    var row = $(this).parents("tr.MoveableRow:first"); 
    var offset = 1; // Offset of TR being swapped with (up/down) 

    if ($(this).is(".up_button")) { 
     row.insertBefore(row.prev()); 
    } else { 
     row.insertAfter(row.next()); 
     offset = -1; 
    } 

    var position = $('tr.MoveableRow').index(row) + 1; 
    $("input[name='" + this.id + "']").val(position); 
    $("input[name='" + row[0].id + "']").val(position + offset); 
}); 
+0

私の仕事は、ありがとう! – MrCornfed

関連する問題