0

jQuery を使用して作成した単純なグリッド レイアウトがあります。問題が 1 つあります。一度に 1 つの編集行のみを許可したい。したがって、現在の編集行を追跡し、次の編集ボタンがクリックされたときにリセットします。それでも、次回の編集をクリックすると、編集できます。現在の行を渡してキャンセルボタンから呼び出しているため、completeEdit は正常に動作します。

 var currentRowEdit =null;

   $(tableid + ".edit").live('click', function(event) {
            currentRowEdit = $(this).parent().parent();
            editRow(currentRowEdit);
    });


function editRow(row){
        if(currentRowEdit!=null){
            completeEdit(currentRowEdit);               
        }              
           $(row).find(".save").show();
           $(row).find(".cancel").show();
           $(row).find(".edit").hide();

    }

function completeEdit(row){             
         $(row).find(".save").hide();
          $(row).find(".cancel").hide();
         $(row).find(".edit").show();              
    }
4

2 に答える 2

1
function completeEdit(row){
   $(row).find(".save").hide();
   $(row).find(".cancel").hide();
   $(row).find(".edit").show();   
   currentRowEdit = null; // reset the currentRowEdit
}

コメントによると

あなたのコードは.saveand.cancelボタンを隠していません。コードフローを見ると、completeEdit()関数の後.show()にそれらのボタンのメソッドを使用していることに気付くからです。

その結果、完了するとボタンは非表示になりますcompleteEdit()が、その後、残りのコードがeditRow()実行されると、それらのボタンが再び表示されます。

于 2012-09-13T19:56:32.237 に答える
0

同じ行で completeEdit と editRow を呼び出していると思います。以前の場合は completeEdit を、新しい場合は editRow を呼び出す必要があります

 var currentRowEdit =null;

   $(tableid + ".edit").live('click', function(event) {
            completeEdit(currentRowEdit);
            currentRowEdit = $(this).parent().parent();
            editRow(currentRowEdit);
    });


function editRow(row){



           $(row).find(".save").show();
           $(row).find(".cancel").show();
           $(row).find(".edit").hide();

    }

function completeEdit(row){
         if(row==null){
           return;

        }
         $(row).find(".save").hide();
          $(row).find(".cancel").hide();
         $(row).find(".edit").show();    

    }
于 2012-09-13T20:01:42.240 に答える