0

テーブルがあり、ユーザーが行の 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++;                          
    });        
});

JSFIDDLE のデモ

4

1 に答える 1

1

私はあなたを理解したと思います。blurイベントではなくイベントを使用しchangeます。

$('#eap tbody tr input[name^="ID"]').blur(function () {
...
于 2013-03-27T21:11:33.997 に答える