2010-05-17 2 views
8

그래서 저는 jQuery의 AJAX 함수를 사용하여 XML을 읽었습니다. 하지만 이제 mouseup이 옵션 항목에서 트리거 될 때 동적으로 생성 된 4 개의 div의 표시 속성을 조작하려고합니다. div의 크기와 x/y는 XML에 의해 결정되며이를 통해 파싱됩니다.jQuery .append()가 IE, Safari 및 Chrome에서 작동하지 않습니다.

제 문제는이 div가 생성되지 않았거나 IE, Safari 및 Chrome에 표시되지 않는다는 것입니다. Firefox와 Opera에서는 작동합니다. 나는 jQuery의 .append()를 사용하여 div를 만든 다음 .css() 함수를 사용하여 조작합니다. Chrome의 개발자 도구를 살펴보면 스크립트에서 변경된 CSS 속성이 스타일 시트의 속성에 의해 무시되고 있음을 알게되었습니다. 모든 수정 사항?

div를 여기에 생성 : 디스플레이 속성 변경

case "dynamic": 
    var n = name; 
    switch(portion){ 
     case "stub": 
     $('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>"); 
     break; 
     case "body": 
     $('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>"); 
     break; 
    } 
    break; 
    case "static": 
    var n = name; 
    switch(portion){ 
     case "stub": 
     $('.ticket').append("<div class='stubEditable' id='"+n+"' title='stub'></div>"); 
     break; 
     case "body": 
     $('.ticket').append("<div class='bodyEditable' id='"+n+"' title='body'></div>"); 
     break; 
    } 
    break; 

와 mouseUp 기능 :

$('#StubTemplates').find('.ddindent').mouseup(function(){ 
    var tVal = $(this).val(); 
    var tTitle = $(this).attr('title'); 
    if(!stubActive){ 
    $('.stubEditable').css('display', 'none'); 
    $('#'+tVal).css('display', 'block'); 
    stubActive = true; 
    }else{ 
    $('.stubEditable').css('display', 'none'); 
    $('#'+tVal).css('display', 'block'); 
    stubActive = false; 
    } 
    }); 
    $('#StubTemplates').find('#stubTempNone').mouseup(function(){ 
    $('.stubEditable').css('display', 'none'); 
    }); 
    $('#BodyTemplates').find('.ddindent').mouseup(function(){ 
    var tVal = $(this).val(); 
    var tTitle = $(this).attr('title'); 
    if(!bodyActive){ 
    $('.bodyEditable').css('display', 'none'); 
    $('#'+tVal).css('display', 'block'); 
    bodyActive = true; 
    }else{ 
    $('.bodyEditable').css('display', 'none'); 
    $('#'+tVal).css('display', 'block'); 
    bodyActive = false; 
    } 
    }); 
    $('#BodyTemplates').find('#bodyTempNone').mouseup(function(){ 
    $('.bodyEditable').css('display', 'none'); 
    }); 
+1

어쨌든 문제의 원인에 대한 예를 들자면 코드 스 니펫을 다듬을 수 있습니까? 또는 적어도 문제를 일으키는 정확한 ID/클래스에 대한 정보를 제공 하시겠습니까? 해당 스 니펫을 정리하기 위해 수행 할 수있는 서식도 유용합니다. 건배. – malonso

+0

좋아, 내가 갈 수있는 한 최대한 내렸다. –

+0

'$ ('#'+ tVal)'우. 'document.getElementById (tval)'에 대해 들어 본 적이 있습니까? jQuery 해시를 추가하는 id-getter는 웹에서 널리 퍼져 있지만 ... 너무 느리고 kludgy입니다. –

답변

4

당신은 스타일이 제대로 요소에 추가되는 개발 도구에서 볼 수 있기를, 문제는 CSS의 캐스케이드에 관한 것만 큼 JQuery에 관한 것이 아닙니다. 일반적으로이 요소에 직접 추가 된 요소는 우선되어야하지만 예외가 있습니다. CSS specificity은 혼동을 줄 수 있습니다. 당신은 어딘가에 중요한 곳이 있습니까?

display : block 및 display : none으로 숨기고 표시하기 때문에 CSS에 표시 여부 : 숨김이 없어야 오버 라이드됩니다.

.show().hide() 또는 .toggle()을 사용하지 않는 이유는 무엇입니까? .removeClass(), .addClass() 또는 .toggleClass()을 사용하여 방해가되는 클래스를 제거하고 다른 클래스를 설정할 수도 있습니다.

다른 모든 것이 실패 할 경우 항상 $ ('. bodyEditable'). css ('display', 'none! important');를 사용해보십시오.

나는 두통이 너무 많이 발생하기 때문에 중요하지 않으려 고 노력합니다 ... 그러나 그것은 이유가 있습니다.

+0

중요하지 않습니다. .stubEditable과 .bodyEditable 모두 display : none으로 설정됩니다. –

+0

유용 할 수도있는 CSS Specificity에 대한 기사에 대한 제 대답의 링크를 추가했습니다. 나는 이런 종류의 일에 대해 상당히 자주 뛰어왔다. 나는 결코 CSS 전문가가 아니다 ... 나는 보통 우리 팀의 redsident CSS 녀석에게 연기하고 거의 항상 펑키 캐스케이드/구체적인 갈등에 빠진다. 요소에 추가 된 스타일을 볼 수 있다는 사실은 JQuery가 스타일 속성을 어떻게 든 변형시키지 않는 한 JQuery를 배제합니다. –

+0

브래들리, jQuery에 1 주일 이상 익숙하지 않으므로이 시점에서 가능한 한 많이 흡수하려고 노력하고 있습니다. 나는 확실히 show()와 hide()를 미래에 사용할 것이다. 게다가 removeClass()와 addClass()를 사용하지 않았다. 가능한 경우 둘 다 사용됩니다. !! 스타일을 덮어 쓰는 것이 중요합니다! 안타깝게도 아무 것도하지 않았습니다. –

1

그래서 문제를 해결할 수있었습니다. select 메뉴의 옵션은 mouseup을 호출하지 않았으므로 : selected selector를 사용하여 select 메뉴에서 .change() 함수를 사용하여 선택한 항목을 찾습니다.

나를 올바른 방향으로 가도록 해주신 Bradley에게 큰 감사를드립니다.

+0

기꺼이 도와 드리겠습니다. 매트! –

0

이 문제에 대한 간단한 해결책은 다음과 같습니다. 추가 할 div에 css display:block;을 추가하십시오. 다른 종류의 display: 일 수 있습니다.