jQuery代码在Firefox中运行但在IE中失败

时间:2012-08-12 16:17:34

标签: javascript jquery jquery-cookie

我遇到了一个我似乎无法识别的问题,代码在Firefox和Chrome中运行良好但在IE中失败。

我有一系列以下元素:

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

我正在尝试创建一个jQuery cookie,用于存储元素是否可见。

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中被错误地写入。但是,当在Ff / Chrome中运行时,此代码非常适用,其中某些ID正确设置为false。

我错过了什么? 谢谢,

2 个答案:

答案 0 :(得分: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('; '));
}

答案 1 :(得分:1)

你总是可以尝试:

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

FIDDLE

值之间没有分隔符,我可能会添加一个逗号:

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(', '));
}

FIDDLE