0

FirefoxとChromeでは完全に機能するが、IEでは失敗するコードで、識別できないような問題があります。

私は次の要素のシーケンスを持っています:

<tbody id="tbod161-1__" isloaded="true" style="display: none;"></tbody>
<tbody id="tbod162-2__" isloaded="true"></tbody>

要素が表示されているかどうかを保存するjQueryCookieを作成しようとしています。

function RememberClickedState() {
$('.ms-listviewtable tbody[id^="tbod"]').each(function(){
    tid = $(this).attr('id');
    var tvisible = ($(this).attr('style') == undefined || $(this).attr('style').indexOf('display: none;') == -1);
    var strVisible;
    if( tvisible == true)
    {
        strVisible = "true";
    }
    if( tvisible == false)
    {
        strVisible = "false";
    }
    items += tid+':'+strVisible+';'
})
$.cookie("itemListState", items);
}

次のコマンドで値を取得すると、次のようになります。

string = $.cookie("itemListState");
alert(string);

... IEではすべてのIDが「true」に設定されています。これは、値がCookieに誤って書き込まれたことを意味します。ただし、このコードは、一部のIDが正しくfalseに設定されているFf/Chromeで実行すると完全に機能します。

私は何が欠けていますか?ありがとう、

4

2 に答える 2

2

変化する:

var tvisible = ($(this).attr('style') == undefined || $(this).attr('style').indexOf('display: none;') == -1);

の中へ:

var tvisible = $(this).is(':visible');

そして私はあなたのコードを少し改善しました:

function RememberClickedState() {
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(){
        var tvisible = $(this).is(':visible');
        items += $(this).attr('id')+':'+String(tvisible);
    });
    $.cookie("itemListState", items.join('; '));
}
于 2012-08-12T16:23:30.600 に答える
1

あなたはいつでも試すことができます:

function RememberClickedState() {
    var items = '';
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(i, e) {
        items += (e.id + ':' + (e.style.display == 'none'));
    });
    $.cookie("itemListState", items);
}​

フィドル

値の間に区切り文字はありません。おそらく、次のようにしてコンマを追加します。

function RememberClickedState() {
    var items = [];
    $('.ms-listviewtable tbody[id^="tbod"]').each(function(i, e) {
        items.push(e.id + ':' + (e.style.display == 'none'));
    });
    $.cookie("itemListState", items.join(', '));
}

フィドル

于 2012-08-12T16:25:23.627 に答える