2012-11-27 95 views
0

我有一個塊:ID搜索只適用於第一個元素

<div class="col-1-4 local_links"> 
<table> 
      <tr> 
       <td> 
        <a href="#user_profile">User Profile</a><div class="arrow-selected"></div> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <a href="#dashboard">Dashboard</a>     </td> 
      </tr> 
      <tr> 
       <td> 
        <a href="#change_password">Change Password</a> 
       </td> 
      </tr> 
     </table> 
</div> 

[...一些代碼...]

<div class="col-3-4 local_responses"> 
    <div class="content full" id="user_profile" style="display: block;"> 
    <h2>settings :: User Profile</h2> 
    </div> 
    <div class="content full" id="dashboard"> 
    <h2>settings :: Dashboard</h2> 
    </div> 
    <div class="content full" id="change_password"> 
    <h2>settings :: Change Password</h2> 
    </div> 
</div> 

有的JS其中如下:

var local_links = $(".local_links"); 
var local_responses = $(".local_responses"); 

$(("a"),local_links).on("click", function(e){ 
    e.preventDefault(); 
    var id = $(this).attr("href"); 
    local_links.find("div.arrow-selected").remove(); 
    $(this).parent().append('<div class="arrow-selected"></div>'); 
    $(".content", local_responses).animate({opacity: 0}); 
    $(id, local_responses).animate({opacity: 1}); 
}); 

如果我做了console.log(id)...它很好地顯示了ID ......但它只適用於第一個元素。我知道我錯過了一些微不足道的東西。有什麼想法嗎?

+1

ID在頁面中必須是唯一的,請改爲使用類。 – Esailija

+0

它是獨一無二的。 :) –

+0

你確定你不是指'local_links.on(「click」,「a」,function(){});'?你的代碼在哪裏有一個元素具有類「local_links」? – Ian

回答

1

我敢肯定,一切都與你的jQuery的正常工作,但是動畫只是opacity不會奇蹟般地在display改變風格從noneblock或任何元素的值。我很確定你爲.content設置了display: none;的樣式。在爲不透明度設置動畫效果時,對於div,其display保持爲none(第一個除外),因爲默認情況下它會被block覆蓋。是否有任何理由你動畫opacity而不是使用類似fadeIn()fadeOut

此外,由於您在href中存儲了id,因此不需要執行類似$(id, local_responses) ...只需使用$(id)即可。看看這個:

http://jsfiddle.net/SgwyM/

var local_links = $(".local_links"); 
var local_responses = $(".local_responses"); 

$(local_links).on("click", "a", function(e){ 
    e.preventDefault(); 
    var id = $(this).attr("href"); 
    local_links.find("div.arrow-selected").remove(); 
    $(this).parent().append('<div class="arrow-selected"></div>'); 
    $(".content", local_responses).fadeOut(400); 
    $(id).delay(400).fadeIn(400); 
}); 

而只是要注意,我改變了on結合,因爲這樣一來,就不會爲每個<a>發現的事件處理程序 - 它創建一個每個項目在local_links中,但僅對選擇器"a"執行。

+0

它可以與淡入/淡出一起使用。謝謝伊恩!我實際上並不知道不透明度:0不會設置顯示:無。那就是訣竅。 –

+0

@JacekDominiak是的,3種完全不同的樣式用於顯示元素 - 「顯示」,「能見度」和「不透明度」。但是,所有3個都是完全不同的,並且不相關 – Ian

0

我不確定你要找的是什麼行爲,但是你的代碼不會改變爲http://jsfiddle.net/CrossEye/hApgg/,我似乎可以在所有這三個鏈接中始終如一地工作。

我不知道爲什麼你寫的括號包裹之下"a"

$(("a"),local_links).on("click", function(e){ //... 

這將發揮同樣的

$("a", local_links).on("click", function(e){ // ... 

但他們也不傷害任何東西。

那麼這個小提琴重複你的問題?如果沒有,那麼問題出現在您發佈的代碼之外的代碼中。

+0

這個階段真的讓人困惑。事實上,它確實在jsfiddle上工作。我會再次檢查我的代碼。 –

+0

是的,你得到的代碼工作「正確」,但這是因爲你沒有設置默認樣式'display'到'none'爲'.content',這是原始問題中沒有指定,但可以假設。在那種情況下,使用'opacity'並不會改變任何關於他們的'display' – Ian

+0

@Ian:是的,這很有可能。目前尚不清楚缺少的是什麼。我假設Jacek可以使用這樣的東西來幫助找出遺漏的東西...... –

相關問題