2012-11-26 83 views
0

我使用javascript/jQuery的從頭開始構建一個幻燈片。我在幻燈片下面動態地將分頁添加爲數字。 我想要的是,無論幻燈片處於活動狀態,通過添加一個名爲active的類可以高亮顯示其各自的分頁編號,該類緩存在名爲this.activeo.active的變量中。由於某種原因,即使我使用正確的選擇器來定位它們,也沒有任何反應。使用jQuery選擇,不能拾取元件即使我能看到它在屏幕上選擇是正確的

這裏是我的代碼:http://jsfiddle.net/A3rQS/

你可以看一下聲明o.paginationItem,在被稱爲fadingFX()功能。我不知道它是什麼問題,它不能被發現。

請問,有人可以幫助...?

非常感謝

回答

1

這是發生了什麼:

  • 創建SlideshowMod
  • 一堆變量的新實例被分配到該實例(幻燈片,控制...分頁,paginationItem ...)
  • 在這一刻,沒有.pagination元素在頁面上,這樣paginationpaginationItem不引用你認爲他們是
  • 你打電話start()方法和裏面調用的addPagination()方法
  • addPagination你正在創建的.pagination元素並將其添加到DOM
  • 只是現在它有可能獲得該元素的引用(因爲它是在DOM最後),所以這是當你要分配paginationpaginationItem變量的時刻
+0

感謝@rdamborsky,這是我的問題,我不知道在代碼中我應該開始分配'pagination'和'paginationItem'。請你能告訴我在哪裏? – Shaoz

+1

在將.pagination元素添加到DOM或之後的任何時間之後,您可以將它們分配給它們。在this.addPagination()方法中設置這些變量是有意義的。例如在$('。slideshow')。append(paginWrap)之後。您還需要將if語句添加到其餘代碼中,或重構一下以獲取o.paginationItem以分離方法並在那裏執行條件檢查。 – rdamborsky

+0

非常感謝@rdamborsky,它現在可以工作......這完全是關於在DOM本身完全建立之後,何時將新元素添加到DOM中。再次感謝。 – Shaoz

2

除非我誤讀的代碼,你只設置的paginationItem一旦值,這一行:

this.paginationItem = this.pagination.find('li'); 

這不是動態的,我的意思當調用this.pagination.find('li')的結果會發生變化時它不會更新 - 只要將該行代碼執行到時,它的值就會設置爲。如果你想改變它,你必須再次調用這行代碼。

+0

正確。你可能想要在addPagination()方法中分配this.pagination和this.paginationItem。 – rdamborsky

1

你的問題是嵌套在o.paginationItem jQuery的對象,返回長度爲0的逆轉,以選擇自己做它的工作:

http://jsfiddle.net/A3rQS/4/

 console.log(o.paginationItem.find('.active')); 
     console.log($('.pagination').find('.active')); 

你會在控制檯中看到這兩個jQuery對象之間的區別。我認爲問題來自創建o.paginationItem的時刻,以及jQuery更新(或者更可能不)它。

我勸你刷新集合中的每個函數被調用的時候,你也有activeSlide.index()返回一個錯誤的範圍內的I-1的值的指數問題。如果你忘記索引,請嘗試將它們寫入rel html屬性中。

+0

你在最後一句中提到了哪些jQuery索引? jQuery對象中的元素也是零索引的。 –

+0

是的,這是myBad,以某種方式回顧了jquery索引是基於一個,認爲它是與每個()循環,但不是。編輯答案,謝謝。 – jonBreizh

相關問題