1

そう。チェックボックスがたくさんあるフォームがあります。それに加えて、ユーザーが送信を押したときにすべてのチェックボックスの状態を保存することになっている JavaScript コードがあります。私の短くて苛立たしい問題は2つあります。質問: フォームを送信するときにのみ、チェックボックスの状態を Cookie に保存したいのですが、現在は、チェックボックスをマークしてページをリロードすると、送信せずに保存されます。私は Javascript と Cookies を使って作業していますが、これはまったく新しい 2 つのことです。だから私はすべての助けにとても感謝しています. ここから取得したコードは次のとおりです。

function getStorage(key_prefix) {
    if (window.localStorage) {
        return {
            set: function(id, data) {
                localStorage.setItem(key_prefix+id, data);
            },
            get: function(id) {
                return localStorage.getItem(key_prefix+id);
            }
        };
    } else {
        return {
            set: function(id, data) {
                document.cookie = key_prefix+id+'='+encodeURIComponent(data);
            },
            get: function(id, data) {
                var cookies = document.cookie, parsed = {};
                cookies.replace(/([^=]+)=([^;]*);?\s*/g, function(whole, key, value) {
                    parsed[key] = unescape(value);
                });
                return parsed[key_prefix+id];
            }
        };
    }
}

jQuery(function($) {
    var storedData = getStorage('com_mysite_checkboxes_'); 

    $('div.check input:checkbox').bind('change',function(){
        storedData.set(this.id, $(this).is(':checked')?'checked':'not');
    }).each(function() {
        var val = storedData.get(this.id);
        if (val == 'checked') $(this).attr('checked', 'checked');
        if (val == 'not') $(this).removeAttr('checked');
        if (val == 'checked') $(this).attr('disabled','true');
        if (val) $(this).trigger('change');
    });

});

基本的に送信時のみCookieに保存したいです。

4

1 に答える 1

4

すべてのチェックボックスsubmitのイベントではなく、フォームのイベントにバインドします。change

2 番目の関数の代わりにこれを試してください。

jQuery(function($) {
    // bind to the submit event of the form
    $('#id-of-your-form').submit(function() {
        // get storage
        var storedData = getStorage('com_mysite_checkboxes_');

        // save checkbox states to cookie
        $('div.check input:checkbox').each(function() {
            // for each checkbox, save the state in storage with this.id as the key
            storedData.set(this.id, $(this).is(':checked')?'checked':'not');
        });
    });

});

jQuery(document).ready(function() {
    // on load, restore the checked checkboxes
    $('div.check input:checkbox').each(function() {
        // get storage
        var storedData = getStorage('com_mysite_checkboxes_');

        // for each checkbox, load the state and check it if state is "checked"
        var state = storedData.get(this.id);

        if (state == 'checked') {
            $(this).attr('checked', 'checked');
        }
    });
});
于 2013-06-18T19:08:22.363 に答える