2017-04-22 92 views
3

的onclick javascript函數只有在第二次點擊工作

function toggleDivFunction() { 
 
    var arrowElement = document.getElementById("arrowRight"); 
 
    var showElement = document.getElementById("dropdownText"); 
 
    arrowElement.onclick = function() { 
 
    if (showElement.style.display == 'none') { 
 
     showElement.style.display = 'block'; 
 
     document.getElementById("arrowRight").style = "transform: rotate(+90deg)"; 
 
    } else { 
 
     showElement.style.display = 'none'; 
 
     document.getElementById("arrowRight").style = "transform: rotate(0deg)"; 
 
    } 
 
    } 
 
}
<p class="dropdownHeader">TOP <span id="arrowRight" class="arrowRight" onclick="toggleDivFunction();"> > </span></p> 
 
<div class="dropdownText" id="dropdownText"><p>TEXT TO BE SHOWN</p></div>

的問題是dropdownText DIV僅在arrowRight跨度第二次點擊後顯示出來。 我曾將其視爲常見問題,但仍未能找到解決方案。任何幫助,將不勝感激。

+0

只是刪除它:arrowElement.onclick = fun ction(){} 您正在添加一個事件監聽器在應該捕獲您的事件的函數中。沒什麼大不了! –

回答

5

您不需要bind a click事件處理程序在另一個click事件處理程序中。你必須使用一個單一的click事件處理程序。

show/hide功能屬於第二click事件處理程序,這是bindedspan DOM元素第一click後。

function toggleDivFunction() { 
 
    var arrowElement = document.getElementById ("arrowRight"); 
 
    var showElement = document.getElementById ("dropdownText"); 
 
    if(showElement.style.display == 'none') 
 
    { 
 
     showElement.style.display = 'block'; 
 
     document.getElementById("arrowRight").style = "transform: rotate(+90deg)"; 
 
    } 
 
    else 
 
    { 
 
     showElement.style.display = 'none'; 
 
     document.getElementById("arrowRight").style = "transform: rotate(0deg)"; 
 
    } 
 
}
<p class="dropdownHeader">TOP <span id="arrowRight" class="arrowRight" onclick="toggleDivFunction();"> > </span></p> 
 
<div class="dropdownText" id="dropdownText"> 
 
<p>TEXT TO BE SHOWN</p></div>

0

你想你的事件處理程序較早分配:

window.onload=toggleDivFunction; 

並刪除的onclick = 'toggleDivFunction()',其不必要再和老派。

當觸發事件(toggleDivFunction)時,您的代碼將分配偵聽器。要觸發監聽器(arrowElement.onclick),您需要導致另一個事件進行第二次點擊

0

刪除arrowElement.onclick = function() {}

爲什麼?

你已經在onclick=toggleDivFunction()應用功能與arrowRight。所以 首先執行toggleDivFunction()然後執行DomarrowElement.onclick。使用的onclick函數中的任何一個,不是兩個