2010-01-28 1 views
0

이 코드는 ID 'links'를 사용하여 ul의 중간에있는 클릭 된 앵커 태그에서 ID를 얻은 다음 해당 ID를 사용한다고 가정합니다. 페이지를 가로 질러 다른 목적을 위해, 그러나 나는 그 요소에 id가없는 것처럼 내가 계속 '정의되지 않은'상태를 유지한다는 경고를 보았습니다. 나는 내 소스 코드를 두 번 확인하고 실제로 ID를 가지고 있으므로 문제가 무엇인지 잘 모르겠습니다.이 Jquery 함수를 수정하고 Javascript가 비활성화 된 경우 대체물을 알아내는 데 도움이됩니다.

$(function() {  
    $('ul#links > li > a').click(function() { 

     var planet = $(this).id; 
     alert(planet); 
     $('#planet').removeClass(); 
     $('#planet').addClass('planet'); 

     var bg = 'black url(../img/' + planet + '.jpg) fixed no-repeat center'; 
     alert(bg); 
     $('body').css('background', bg); 
    });    
}); 

또한이 Jquery 기능은 이러한 상황을 처리하는 Javascript 방식으로 사용됩니다. 이미 쿠키를 설정하고 이전 페이지로 사용자를 반환 한 다음 쿠키를 사용하여 새 CSS를로드하는 빠른 스크립트로 리디렉션되는 PHP 솔루션을 구현했습니다. JS가 비활성화 된 경우 JS 메서드에 대한 백업으로 해당 메서드를 사용할 수있는 방법이 있습니까?

페이지 - http://schnell.dreamhosters.com/folio/

답변

2

를 사용합니다. jQuery 대안은 $(this).attr("id")입니다.

두 번째로 요소를 두 번 저장하지 않고도 addClass()removeClass()을 연결할 수 있습니다. 이것은 귀하의 문제에는 필요하지 않지만 좋은 습관입니다. 당신이 당신의 링크 어딘가에 통과하지 않으려면

셋째, 당신은 단순히 (도하지 evt.stopPropagation()) return false;로 끝나는 (이벤트 콜백에 전달 된 객체에 evt.preventDefault()를 호출하여) 기본 동작을 방지하기 위해 중 하나가 필요합니다.

마지막으로 동일한 작업을 수행하는 페이지로 이동할 수 있기 때문에 Javascript를 사용하지 않도록 설정하는 것이 좋습니다. 나는 쿠키를 설정하고 방향을 바꾸는 것에 신경 쓰지 않을 것이다. 스크립트 이름 URI 인 경우 /view/planet.php이 작업을 수행 :

<a id="saturn" href="/view/planet.php?planet=saturn">Saturn</a> 

을 당신이 할 수있는 동일한 스크립트 내부에서 (내가 여기에 PHP를 믿고있어, 난 당신이 무엇을 사용에 대한 언급 보지 않았다) :

$planets = array(...); 
$planet = $_GET['planet']; 
if (in_array($planet, $planets)) { 
    echo <<<END 
<style type="text/css"> 
body { background: black url(.../img/$planet.jpg) fixed no-repeat center; } 
</style> 
END; 
} 
을 페이지를 렌더링하는 동안

+0

모두의 수정 사항은 올바른 ID를 얻기 위해 작동합니다. 이제 문제는 올바른 ID를 얻고 addClass를 수행하거나 CSS의 바디 배경을 변경 한 후에도 아무 것도 변경되지 않는다는 것입니다. 그건 그렇고, 마지막에는 'return false'입니다. 이것은이 함수가 실패하면 (JS가 꺼져 있음을 의미), 링크가 href 속성을 기본값으로하고 따르는 것을 의미합니까? –

+0

수정 된 CSS는 CSS 파일의 위치가 아닌 HTML 페이지의 이미지 상대 경로가 있어야 할 수 있습니까? 404 오류에 대한 웹 서버 또는 웹 서버 로그에서 응답을 확인하십시오. –

+0

당신은 길가에 대해 옳았습니다. 그것은 해결되었습니다. 하지만 지금은 내 다른 문제는 addClass() 함수가 작동하지 않는 것입니다. 내 CSS 시트에는 .earth {color : # 2020FF;}, .neptune {color : # 4169E1;}, .moon {color : # E4E4E4}과 같은 클래스가 있습니다. 그 (것)들을 추가하거나 제거하기의 점은 간단하게 센터 심상의 가까이에 div 상자에있는 원본의 색깔을 바꾸기위한 것이다. –

0

당신은 요소에서의 jQuery 객체를 생성하고 그에서 ID를 얻으려고합니다. 그것은 당신이 ATTR 방법을 사용한다면,하지만 당신은 단지 요소 자체에서 ID를 얻어야한다 : 백업 방법에 관해서는

var planet = this.id; 

, 그럴듯하게 들린다. 그러나 다른 페이지로 연결하는 대신 표시 할 항목을 결정하는 쿼리 문자열을 사용하여 동일한 페이지에 연결합니다.

$(function() {  
    $('ul#links > li > a').click(function() { 
    var planet = this.id; 
    $('#planet').removeClass().addClass("plane"); 
    var bg = 'black url(../img/' + planet + '.jpg) fixed no-repeat center'; 
    $('body').css('background', bg); 
    return false; 
    });    
}); 

첫째, this.id는 당신에게 ID를 얻을 것이다 :

0

$(this).id은 문제가 어디에 ... 당신은 아주 가까이 있었다 $(this).attr('id')