2010-01-28 42 views
0

這段代碼應該從ul中間點擊一個點擊的錨點標記獲得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處理這種情況的方式。我已經實現了一個PHP解決方案,其中包括被重定向到一個快速腳本,該腳本設置了一個cookie並將用戶返回到上一頁,然後使用該cookie加載新的CSS。有沒有辦法在JS被禁用的情況下使用該方法作爲JS方法的備份?

頁 - http://schnell.dreamhosters.com/folio/

回答

2

你是八九不離十:

$(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。 jQuery替代品是$(this).attr("id")。其次,您可以連鎖addClass()removeClass()保存查找元素兩次。這對您的問題不是必需的,但是是一種很好的做法。

第三,除非你想你的鏈接到某個地方穿過你需要可以防止默認動作(通過調用傳遞給回調的事件對象evt.preventDefault()),或簡單地用return false;結束(這也確實evt.stopPropagation())。

最後,你正在做的事情非常適合使用JavaScript禁用,因爲你可以去一個頁面做同樣的事情。我不會爲設置cookie和重定向而煩惱。如果腳本名稱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或更改身體的背景w/CSS後,沒有任何更改。順便說一句,最後的'返回虛假'。這是否意味着如果這個函數失敗(意味着JS關閉),那麼鏈接將默認爲href屬性並且遵循那個? – 2010-01-28 22:28:34

+0

難道是因爲修改後的CSS需要具有相對於html頁面的圖像路徑,而不是css文件的位置?檢查從Web服務器或Web服務器日誌獲取的404錯誤響應。 – 2010-01-28 22:35:26

+0

你說得對,路徑已經解決了。但現在我的另一個問題是,addClass()函數似乎沒有工作。在我的CSS表格中有類:.earth {color:#2020FF;},.neptune {color:#4169E1;},.moon {color:#E4E4E4;}。添加/刪除它們的目的僅僅是改變中心圖像附近的div框中文本的顏色。 – 2010-01-28 22:48:59

0

你正在創建從元素的jQuery對象,並嘗試從該ID。它將會,如果你使用attr方法,但你應該只得到元素本身的ID:

var planet = this.id; 

作爲備份方法,這聽起來很有道理。但是,不是鏈接到不同的頁面,而是使用查詢字符串鏈接到同一頁面,該查詢字符串確定要顯示的內容。

0

$(this).id是其中的問題是...使用$(this).attr('id')

相關問題