2012-12-25 61 views
1

我有了一堆的下拉按鈕,如此的頁面:下拉按鈕:更新單個按鈕選擇文本頁面上

<div class=\"button middle dropdown\"><a href=\"#\">Engineer</a> 
    <ul> 
    <li><a href=\"#\">Name1</a></li> 
    <li><a href=\"#\">Name2</a></li> 
    </ul></div> 
    <div class=\"button middle dropdown\"><a href=\"#\">Engineer</a> 
    <ul> 
    <li><a href=\"#\">Name1</a></li> 
    <li><a href=\"#\">Name2</a></li> 
    </ul></div> 

在同一頁上我有這樣的jQuery的更新在下拉按鈕,一個文本選擇:

$(document).ready(function() { 
     $(".button.middle.dropdown ul li a").click(function() { 
      var oldtext = $(".button.middle.dropdown a").html(); 
      var text = $(this).html(); 
      $(".button.middle.dropdown a").html(text); 
      $(this).html(oldtext); 
      $(".button.middle.dropdown a ul").hide(); 
     });  
    }); 

的問題是,這將更新頁面上的所有按鈕的文字,而不是僅僅被選中的一個。它顯然是這樣做的,因爲jQuery代碼在更新到處都有一個.button.middle.dropdown a。我會將id=""添加到<a>,但這些按鈕是在加載頁面時(從SQL查詢中)動態創建的。我怎樣才能讓下拉按鈕更新只有按下的下拉按鈕上的文字?

+0

在處理程序的內部,您需要使用$(this)。我會給你的hrefs分配一個類:''href = \「#\」class =「abutton」>工程師'所以你可以區分兩種類型的鏈接。 – AlecTMH

+0

由於這是全部動態創建的,因此每個按鈕的文本都會被分配到依次類,它仍然會更新頁面上所有按鈕的顯示文本,而不僅僅是單擊一次。 – Thud

回答

2

使用$(this)

而不是

$(".button.middle.dropdown a").html(); 

使用

$(this).html(); 

全碼

$(document).ready(function() { 
    $(".button.middle.dropdown ul li a").click(function() { 
     var $this = $(this); 
     var $link = $this.closest('.button.dropdown').children('a'); 
     var oldtext = $link.html(); 
     var text = $this.html(); 
     $link.html(text); 
     $this.html(oldtext); 
     $(".button.middle.dropdown a ul").hide(); 
    }); 
});​ 

Check Fiddle

+0

這樣做只會更新我在下拉列表中選擇的內容,而不是下拉按鈕上顯示的文本,這正是我正在嘗試執行的操作。 – Thud

+0

你有沒有看過我發佈的完整代碼... –

+0

對不起!這並沒有顯示我第一次檢查!這真棒,感謝您的幫助! – Thud

相關問題