2012-08-12 5 views
0

Firefox와 Chrome에서는 완벽하게 작동하지만 IE에서는 작동하지 않는 코드로 인해 식별 할 수없는 문제가 있습니다. 내가 요소 표시 여부 저장하는 jQuery를 쿠키를 만들려고하고jQuery 코드는 Firefox에서 작동하지만 IE에서는 오류가 발생합니다.

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

:

나는 다음과 같은 요소의 순서가 있습니다.

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

이 ... 모든 ID가 값이 잘못 쿠키에 기록 된 의미, IE에서 "true"로 설정됩니다

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); 
} 

내가 가진 값을 검색합니다. 그러나이 코드는 일부 ID가 올바르게 false로 설정된 Ff/Chrome에서 실행될 때 완벽하게 작동합니다.

무엇이 누락 되었습니까? 감사합니다,

+1

jQuery를 사용하면 그냥 $ (이)'말할 수있다. is (': visible')'... 또한 boolean을 문자열로 변환하기 위해'if/else'가 필요하지 않습니다. 단지 문자열 연결 표현식에서 직접 사용하십시오. – Pointy

+0

"style"속성의 값을 읽는 대신 $ (this) .css ('display') == 'none'을 확인하십시오. – sgress454

답변

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

이것이 작동하지 않습니다. 결과 쿠키에는 참/거짓 정보, ID 만 들어 있습니다. –

+0

@AndreiCristof - 이제 작동합니다. 단지 오타입니다! – adeneo

+0

두 번째로 수정 된 버전이 작동했습니다. 단지 .join()에서 ','에서 ';'로 구분 기호를 변경해야합니다. 나는 너에게 충분히 감사 할 수 없다. –

2

변화 :

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

그리고 난 당신의 코드를 조금 개선 :

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

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

tvisible 라인의 최적화는 Firefox에서 성공적으로 수행되었지만 IE에서는 아무런 차이가 없었습니다. 이 메소드를 개선 된 코드로 완전히 대체 한 결과 참/거짓 정보없이 ID 만 포함하는 결과 쿠키가 파기되었습니다. –

+0

확인 개선 된 코드를 편집했습니다. 시도해보십시오. –

관련 문제