2012-08-12 63 views
0

我有一个问题,我似乎无法识别,代码在Firefox和Chrome中运行良好,但在IE中失败。jQuery代码在Firefox中工作,但在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); 

...所有的ID是在IE中设置为“真”,这意味着该值被错误地写在cookie中。但是,在Ff/Chrome中某些ID正确设置为false的情况下运行时,此代码可以很好地工作。

我错过了什么? 谢谢,

+1

使用jQuery你可以说'$(本)。是(':visible')'...你也不需要'if/else'来将布尔值转换为字符串 - 直接在字符串连接表达式中直接使用它。 – Pointy 2012-08-12 16:21:05

+0

尝试检查$(this).css('display')=='none',而不是读取“style”属性的值。 – sgress454 2012-08-12 16:32:06

回答

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

+0

这不起作用 - 结果cookie不包含真/假信息,只是ID。 – 2012-08-12 16:34:08

+0

@AndreiCristof - 现在工作,只是一个错字! – adeneo 2012-08-12 16:37:01

+0

第二次编辑版本工作,只需要将.join()中的分隔符从','更改为';'。我不知道该怎么感谢你才足够。 – 2012-08-12 20:07:45

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

隐形线的优化在Firefox中成功运行,但在IE中没有任何区别。完全用改进后的代码替换方法,打破了现在只包含ID的结果cookie,没有真/假信息。 – 2012-08-12 16:39:47

+0

好吧,我编辑了我的改进代码,试试吧 – 2012-08-12 17:14:29

相关问题