2016-03-09 77 views
0

我試圖在點擊父節點標記時切換節點的文本。下面是HTML:jQuery文本無法在第一次點擊時切換

<h2 class="panel-title"> 
    <a href="#collapse1"> 
     <span class="ui-hidden-accessible">expand</span> 
    </a> 
</h2> 

,而這是被稱爲錨標記上的每一次點擊

function changeText() { 
var taskDivClass = $('.panel-title a'); 
$(taskDivClass).each(
    function() { 
     var $this = $(this); 
     if($this.hasClass('collapsed')) { 
      var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
      taskDivSpanText.html('expand'); 
     } 
     else { 
      var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
      taskDivSpanText.html('collapse'); 
     } 
    } 
); 
} 

我使用each方法changeText功能的JavaScript的,因爲有多個這樣的塊中的每個點擊事件,只有特定的跨度應該改變。

.collapsed類在用戶點擊錨標籤時動態切換。

問題出在第一次用戶點擊錨標籤時,文本未被切換。在下一次點擊它確實。

我真的不知道我在這裏錯過了什麼。如果有人有線索,請指出。

+0

你不調用該函數。在 –

+0

之後添加'changeText();'請注意,如果這就是你正在使用的jQuery UI有事件處理程序和鉤子。 – adeneo

+0

我正在使用它來將函數綁定到click事件:'$(「。panel-heading」)。click(changeText);' – anwartheravian

回答

2

如果您不想使用.html()添加/刪除類作品。

希望這將幫助你..

$(document).ready(function(){ 
 
    $("a").click(function(){ 
 
    var spanClick= $(this).find('.ui-hidden-accessible'); 
 
    if (spanClick.html()==="Expand"){ 
 
    spanClick.html("Collapse"); 
 
    } 
 
    else{ 
 
    spanClick.html("Expand"); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse1" > 
 
    <span class="ui-hidden-accessible">Expand</span> 
 
    </a> 
 
</h2>

https://jsfiddle.net/7vx1ueo1/2/

2

你並不需要循環 - 原來選擇已適用於所有匹配的元素

$(function() { 
 
    $('.panel-title a').on('click', function() { 
 

 
    var $this = $(this); 
 

 
    if ($this.hasClass('collapse')) { 
 
     var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
 
     $this.removeClass('collapse'); 
 
     taskDivSpanText.html('expand'); 
 

 
    } else { 
 
     var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
 
     taskDivSpanText.html('collapse'); 
 
     $this.addClass('collapse'); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse1" class="collapse"> 
 
     <span class="ui-hidden-accessible">collapse</span> 
 
    </a> 
 
</h2> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse2"> 
 
     <span class="ui-hidden-accessible">expand</span> 
 
    </a> 
 
</h2> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse3"> 
 
     <span class="ui-hidden-accessible">expand</span> 
 
    </a> 
 
</h2>

你也可以封裝功能到一個名爲功能就像在你的代碼

$(function() { 
 
    // define function 
 
    var changeText = function() { 
 

 
    var $this = $(this); 
 

 
    if ($this.hasClass('collapse')) { 
 
     var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
 
     $this.removeClass('collapse'); 
 
     taskDivSpanText.html('expand'); 
 

 
    } else { 
 
     var taskDivSpanText = $this.find('.ui-hidden-accessible'); 
 
     taskDivSpanText.html('collapse'); 
 
     $this.addClass('collapse'); 
 
    } 
 
    }; 
 

 
    // bind function to click event 
 
    $('.panel-title a').on('click', changeText); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse1" class="collapse"> 
 
     <span class="ui-hidden-accessible">collapse</span> 
 
    </a> 
 
</h2> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse2"> 
 
     <span class="ui-hidden-accessible">expand</span> 
 
    </a> 
 
</h2> 
 
<h2 class="panel-title"> 
 
    <a href="#collapse3"> 
 
     <span class="ui-hidden-accessible">expand</span> 
 
    </a> 
 
</h2>

+0

我不想在這裏添加/刪除摺疊類,所以我已經。使用該代碼,而不是: '$( '面板所有權 ')上(' 點擊',函數(){ \t變量$這= $(本); \t如果($ this.hasClass( '崩潰')){ \t VAR taskDivSpanText = $ this.find( 'UI隱藏訪問的。 '); \t的console.log(taskDivClass); \t \t taskDivSpanText.html(' 擴大'); \t} else { \t var taskDivSpanText = $ this.find('。ui-hidden-accessible'); \t taskDivSpanText。HTML( '崩潰'); \t \t console.log(taskDivSpanText); } \t} });' – anwartheravian

+0

但是控制檯顯示錯誤,它顯示值爲'taskDivSpanText'爲空 – anwartheravian

+0

嗯,'taskDivClass'沒有在我的代碼中定義 - 爲什麼要記錄/使用它?你不需要它 - 你正在記錄'taskDivClass',但是你說'taskDivSpanText'爲空(它們是不同的元素) – ochi