テーブルがあり、ユーザーが行の ID を変更すると、この新しい ID に基づいて行を新しい位置に再配置する必要があります。
したがって、これを管理するための変更関数を作成しますが、コード内で行を移動するときに変更を再度トリガーします。
移動時に変更をトリガーしない方法はありますか、それとも別の方法で変更をトリガーする必要がありますか?
何か案は?
HTML コード:
<table id='eap'>
<tr><th>ID</th><th>INFO1</th><th>INFO2</th></tr>
<tr><td><input name="ID1" value='1'/></td><td>1.1</td><td>1.2</td></tr>
<tr><td><input name="ID2" value='2'/></td><td>2.1</td><td>2.2</td></tr>
<tr><td><input name="ID3" value='3'/></td><td>3.1</td><td>3.2</td></tr>
<tr><td><input name="ID4" value='4'/></td><td>4.1</td><td>4.2</td></tr>
<tr><td><input name="ID5" value='5'/></td><td>5.1</td><td>5.2</td></tr>
</table>
Jクエリコード:
$('#eap tbody tr input[name^="ID"]').change(function () {
alert('start');
//changed row
var $row = $(this).closest('tr');
//New ID
var $newID = this.value;
//Loop all in search for the correct ID position
$('#eap tr input[name^="ID"]').each(function (i){
if ( (parseInt($newID) <= parseInt($(this).val())) && $row.index() != $(this).closest('tr').index() ){
//found position
$newrow = $(this).closest('tr');
//move row
//this trigger change again
$($newrow).before($($row));
return false;
}
});
//put id in order
$id=1;
$('#eap tr input[name^="ID"]').each(function (i){
$(this).val($id);
$id++;
});
});