2

入力テキストボックスの横にチェックボックスがあります。チェックボックスがオンになっている場合、テキストボックスは空になり、無効になります。ただし、以前にそのテキストボックスに値を保存して、ユーザーがチェックボックスをオフにした場合にテキストボックスに返されるようにします。これが私のコードです:

function disablePath() {
    var currentPath;
    $('#user_strategy').on('change','input[value="all"]', function(){
        var that = $(this);
        if($(this).is(':checked')) {
            currentPath = that.next().val();
            that.next().attr("disabled", "disabled").val('');
        }
        else {
            that.next().removeAttr("disabled").val(currentPath);
        }
    });
}

したがって、チェックボックスが1つだけで、その後にテキストボックスが続く場合は、これで問題なく機能します。チェックボックスとテキストボックスの組み合わせが複数あると、問題が発生します。複数のチェックボックスをオンにすると、最後のテキストボックスの内容のみが保存されます。したがって、以前にチェックしたボックスのいずれかをオフにすると、関係に関係なく、チェックボックスに関連する最後のテキストボックスの値が対応するテキストボックスに入力されます。前のチェックボックスに固有のテキストボックスの値を保存する方法はありますか?ライブコードは次のとおりです。

http://kaboukie.net/stackoverflow/

eventDataを使用する必要があると思いますが、その方法がわかりません。ご協力いただければ幸いです。

4

3 に答える 3

2

Jquery の .data() メソッドを使用して実行できる要素自体にデータを添付することをお勧めします。

これは、私がすでに正しく動作することをテストしたコードです;)

$(function() {
    function disablePath() {
        var currentPath;
        $('#user_strategy').on('change','input[value="all"]', function(){
            var that = $(this);
            if($(this).is(':checked')) {
                temp= that.next().val();
                that.data("currentPath" , temp);
                that.next().attr("disabled", "disabled").val('');
            }
            else {
                that.next().removeAttr("disabled").val(that.data("currentPath"));
            }
        });
    }
    disablePath();
}); 
于 2012-07-24T23:46:17.623 に答える
0

データをチェックボックスの属性として保存するのはどうですか?

$(function() {
    function disablePath() {
        var currentPath;
        $('#user_strategy').on('change','input[value="all"]', function(){
            var that = $(this);
            if($(this).is(':checked')) {
                $(this).attr("x:savedData", that.next().val());
                that.next().attr("disabled", "disabled").val('');
            }
            else {
               that.next().removeAttr("disabled").val($(this).attr("x:savedData"));
            }
        });
    }
    disablePath();
});

http://jsfiddle.net/ruwJT/

ベストプラクティスではないかもしれませんが、うまくいきます。

于 2012-07-24T23:43:55.530 に答える
0

問題は、currentPath を設定すると、どの要素が原因であったかを覚えていないことです。

これを回避するには、各チェックボックスに一意の ID 属性を割り当て、その ID をテキストボックスの値とともにキーと値のペアとして保存します。

または、jQuery の.data()メソッドを使用して、任意の要素に abritraty データを保存することもできます。http://jsfiddle.net/EP5bg/を参照してください

于 2012-07-24T23:46:59.947 に答える