2012-08-12 64 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

相關問題