2012-07-26 88 views
0

我是新來的堆棧溢出和從頭開始使用jQuery,所以請原諒我任何不正確的格式(或只是完全省略代碼)和顯然以次充好的編碼實踐。jQuery函數無法解析

我在這裏編制的投資組合: Question answered, link removed

如果你嘗試點擊導航中的鏈接,有一個淡出>淡入效果解決。在Portal和About之間,這些鏈接華麗地工作,但是如果您點擊日記,資源或聯繫人,則文本會中斷,並且在離開它們時無法淡出。

我可以替換單個div的innerHTML,但我更願意使用此格式來交換內容。任何人都可以告訴我爲什麼它與前兩個鏈接一起工作,但是當我對它們進行相同編碼時,爲其他三個鏈接打破了?

+0

[SSCCE](http:// robzu。com/sscce-short-self-contained-correct-compilable-example /) - 請直接提供適用的代碼,並根據需要提供鏈接。 – RobB 2012-07-26 17:35:21

+0

你可能想把代碼放在這裏,對它沒有科學性 - 實際上,你必須或者將會像關閉一樣好 – Alexander 2012-07-26 17:36:43

回答

2

我不確定這是否能解決您的問題,但我注意到您的所有條件檢查都使用一個等號而不是雙倍(或甚至更好,三倍!)等於。

試着改變你的所有條件,從這個:

else if (about=true) 

這樣:

else if (about===true) 

編輯:找過的JavaScript長一點之後,我注意到你有不必要的多餘的很多碼。我已經在jsfiddle上寫了一個小示例,希望能夠幫助您大幅減少代碼。

http://jsfiddle.net/FdeM9/

$('a').on('click', function() { 
    var clickedDiv = this; 
    var visibleDiv = $('div:visible'); 
    var divToShow = $('div').eq(parseInt(clickedDiv.innerHTML)-1); 

    if (visibleDiv[0] === divToShow[0]) { 
     return; 
    } 

    visibleDiv.fadeOut(500, function() { 
     divToShow.fadeIn(500); 
    }); 
});​ 
+0

事實上,它確實解決了大部分問題。但是,「日記」似乎無法導航到「資源」或「聯繫人」,並且資源仍然中斷。 o_O – Kwon 2012-07-26 17:45:17

+0

@Kwon您的鏈接現在似乎正在完美運行(在Chrome,至少)編輯 - 雜誌仍然有問題。 – jbabey 2012-07-26 17:47:53

+1

@Kwon看到我更新的答案。 – jbabey 2012-07-26 17:56:54

2

你應該在你的if語句使用雙等於==的比較。

+0

謝謝!我不知道我是如何錯過的。不過,我確實進行了更改,發現在幾條鏈接之間導航時仍然遇到一些問題。 – Kwon 2012-07-26 17:43:31

+0

對於初學者來說,我認爲'$('#nav_05')'塊中的代碼應該檢查'journal == true'而不是'resources == true'。實際上,很多這些檢查在#nav_04,#nav_05上似乎不正確。 – Quantastical 2012-07-26 17:55:25

+0

啊,冗餘編碼的瘟疫。感謝您指出。 – Kwon 2012-07-26 18:11:29

0

最簡單,最乾淨的方法是讓所有的菜單項一類的可以說「菜單」

然後用這個

$(".menu").click(function() { 
    $(".menu").fadeOut().delay(500); 
    $(this).fadeIn(); 
} 
+0

這在我的腦海中是有道理的,所以我會給你一個鏡頭,謝謝。 – Kwon 2012-07-26 17:57:01

1

你與比較混亂賦值運算符(=)運算符(==或===用於輸入比較)。

由於您的條件,從布爾變量閱讀,你可以這樣做:

如果(條件){

}

而且腳本標記缺少類型的屬性。

此外,您應該在函數內部封裝這些事件綁定調用,並將該函數附加到onReady(jQuery(document).ready)事件。

在全局變量中也是邪惡的(至少應該避免)。看看你的代碼,看起來你打算使用這些全局標誌來啓用或禁用某些菜單項?爲什麼不首先控制這些菜單項的渲染,這樣你就不需要全局變量。

+0

我修正了比較運算符(並且添加了類型屬性而不是懶惰),但是將腳本附加到一個真正必要的onReady事件還是僅僅是良好的編碼習慣?儘管如此,你還是有最後一點的地方。你建議使用ajax還是我錯過了一些明顯而簡單的東西? – Kwon 2012-07-26 17:53:56

+0

您可能正在使用一些php代碼來控制頂部布爾標誌的值。我的建議是,而不是這樣做,使用相同的服務器端PHP條件來控制是否呈現/書寫單個菜單項。既然你提到了ajax,你是否嘗試啓用/禁用某些菜單項而不重新加載頁面?那麼在那種情況下,你可以改用風格類來控制它。 – Hyangelo 2012-07-26 18:03:39

+0

準備工作是必要的,因爲您可能最終將這些腳本移動到單獨的文件中,或在實際菜單div之前移動腳本標記。你想對onReady事件執行初始化的原因是你的初始化代碼依賴於DOM的準備。 – Hyangelo 2012-07-26 18:05:20