0

ダブルクリックでアクティブ化および非アクティブ化する入力のテーブルがあります。現在、この入力にはDBからのデータが事前に入力されています。ユーザーが入力をダブルクリックして変更すると、DBを更新するためにボタンを押す必要があるため、ユーザーがボタンを押さずに変更した後に別のセルをクリックすることにした場合に備えて、入力の値を保存したいと思います。その後、元の値に送信されなかった値を置き換えることができます。私はjqueryを使用してこのattrトグルを実行し、入力を読み取り専用に変更していますが、jqueryに関する私の知識は、私が望むものを達成するために制限されています。これがいくつかのサンプルコードです

ありがとう

4

4 に答える 4

1

私が質問を理解している場合、ユーザーがデータを変更する前にデータを保存し、ユーザーが行った変更を保存しない場合はデータを元に戻すことを検討しています。

問題を正しく理解していれば、$。data()を使用して古い値を維持します。基本的に、キーと値のペアをhtml要素に保持できるため、入力の文字列バックアップを保持するのはかなり簡単です。これをdblClickに追加して、値をバックアップします。

$input.data("backup", $input.val());

そして、これを追加して元の値に戻します。

function backup ($input) {
  $input.val($input.data('backup'));
}
于 2012-09-14T18:09:48.397 に答える
1

チャームのように機能します..

すべての行(tr)には独自のキャッシュ変数があります

1つの入力を編集する場合、そのプライマー値はその親trキャッシュ変数にキャッシュされます。別の入力を編集すると、最初の入力は元の値に戻ります。

$(function(){
    // jQ 1.7 for on method
    $('table tr').data('bak',{$node:null, value:''}).on('dblclick', 'input[type="text"]', function(e){
        var $input = $(this),
            $tr = $input.closest('tr'),
            data = $tr.data('bak');
        // No input yet edited on this tr/line OR same
        if(! data.$node ){
            $input
                .toggleClass("active")                             
                .prop('readonly', false);
            $tr.data('bak',{$node:$input, value:$input.val()});                          
        } else if($input.attr('id') != data.$node.attr('id')){              
                data.$node
                    .toggleClass("active")
                    .prop('readonly', true);
                // restore initial value for the previous clicked input
                data.$node.val(data.value);
                // backup bak with the new input double clicked and it's value
                $input
                    .toggleClass("active")
                    .prop('readonly', false);
                $tr.data('bak',{$node:$input, value:$input.val()});
        }
        return false;
    });
});
于 2012-09-14T18:48:46.243 に答える
0

私はJqueryの初心者でもあります。次のような変数に入力を入れてみることができます

var item = this.value;

あなたのコードのボタンはどこにありますか?

于 2012-09-14T18:02:04.210 に答える
0

私があなたの質問を完全に理解しているかどうかわかりません。たぶん、このような関数はあなたが必要とすることをするはずです:

function toggleReadonly(o, force) {
    if (force != undefined) { //Force state: true: readonly, false: modifiable
        if (force) o.attr('readonly', 'readonly');
        else o.removeAttr('readonly');
    } else { //Toggle current state
        if (o.attr('readonly') == undefined) o.attr('readonly', 'readonly');
        else o.removeAttr('readonly');
    }
}

//...
toggleReadonly($(this)); //simply toggle
toggleReadonly($(this), true); //set readonly
toggleReadonly($(this), false); //set modifiable
于 2012-09-14T18:07:20.067 に答える