1

jQueryによって名前要素に変更されたhtmlコードの行の1つ(例:行2 )を削除した後、必要です。

たとえば、最初にhtmlに次のように記述します。

行1: name = "check [ 0 ] []"
行2(削除済み): name = "check [ 1 ] []"
行3: name = "check [ 2 ] []"
行4: name = "check [ 3 ][]」

ここで、2番目の行を削除すると、実際には、行2を削除した後、次のような行があります。

行1: name = "check [ 0 ] []"
行3: name = "check [ 2 ] []"
行4: name = "check [ 3 ] []"

しかし、私はそれを結果として(行の1つを削除した後:行2)次のようにしたいと思います:

行1: name = "check [ 0 ] []"
行3: name = "check [ 1 ] []"
行4: name = "check [ 2 ] []"

私は(私の完全なコードを参照してください)として試しましたが、動作しません:http: //jsfiddle.net/k3wne/

Js:

$('.remove_input').live('click', function (e) {
    e.preventDefault();
    var remove = $(this).closest($class);
    remove.fadeOut('slow', function () {
        $('.add_units').each(function (idx, val) {
            var num = $('.add_units').length;
            NumIdx = (num - (num - idx));
            //for(var i = 0; i < num-1; i++){
            $(this).closest($class_guide).next($class_guide).each(function (idx, val) {
                $('.add_units input[type="checkbox"]').attr('name', function (idx, str) {
                    var int = parseInt(str.match(/\d+/)[0], 10);
                    return str.replace(int, NumIdx);
                })
            });
            //}
        })
    });)
}​
4

3 に答える 3

2

ここ

デモ

$('.remove_input').live('click', function (e) {
    e.preventDefault();
    var remove = $(this).closest('.RowCheck');
    remove.fadeOut('slow', function () {
        $(this).remove(); // or change next line to  $('.RowCheck:visible')
        $('.RowCheck').each(function (idx) {
            var checkBoxes = $('input[type="checkbox"]',this);
            checkBoxes.each(function(i) {
              var str = $(this).attr('name');  
              var currentIdx = parseInt(str.match(/\d+/)[0], 10);  
              $(this).attr('name', str.replace(currentIdx,idx));
           })
        });
    });
});​

このコードは、次のいずれかの場合に機能します

  1. 実際に行を削除します-ExplosionPillsまたは
  2. サイモンがしたように目に見えるものをテストする
于 2012-12-19T16:03:13.137 に答える
1

http://jsfiddle.net/k3wne/1/

いくつかのこと:要素がフェードアウトした後は、実際に要素を削除することはありません。これにより、カウントが台無しになります。最後のセレクター(.RowCheck input[type="checkbox"])はすべてのチェックボックスに影響するため、すべてのチェックボックスの数が最大になります。

私の変更では、反復の現在の行のみが影響を受けます。

于 2012-12-19T15:56:26.067 に答える
1

ほとんどのコードは正しいですが、いくつかの変更が必要です。

$('。RowCheck:visible')。each()を使用するように変更します 。fadeOutはその行を非表示にするだけで、実際には削除しないため、内部ループでは$('input [type = "checkbox"]'、this)を使用する必要があります。

コードは次のようになります。

$('.remove_input').live('click', function (e) {
    e.preventDefault();
    var remove = $(this).closest('.RowCheck');
    remove.fadeOut('slow', function () {
        debugger;
        $('.RowCheck:visible').each(function (idx, val) {
            var num = $('.RowCheck:visible').length;
            NumIdx = (num - (num - idx));
            //for(var i = 0; i < num-1; i++){
            //$(this).closest('.RowCheck').next().each(function (idx, val) {
                $('input[type="checkbox"]', this).attr('name', function (idx, str) {
                    var int = parseInt(str.match(/\d+/)[0], 10);
                    return str.replace(int, NumIdx);
                })
            //});
            //}
        });
    });
});​

デモ

于 2012-12-19T16:19:14.847 に答える