2015-06-17 55 views
0

我試圖在我的HTML中使用按鈕來跟蹤。我有Javascript代碼,做我所需要的。但是,對於每個按鈕,它都會在頂部進行跟蹤。我不確定在Javascript代碼中需要更改哪些內容才能跟蹤HTML中每個按鈕的點擊次數。Javascript中的OnClick函數

<div id="clientAssist"> 
    <div data-role="header"> 
     <h2>Client Assist</h2> 
    </div> 
    <div data-role="content"> 
     <div class="space"> 
      <form name="form1" method="post" action=""> 
       <p> 
        <label for="name">Client: </label> 
        <input type="text" name="name" id="name" placeholder="Client name"> 
       </p> 
       <p> 
        <script type="text/javascript"> 
         var clicks = 0; 
         function onClick() { 
         clicks += 1; 
         document.getElementById("clicks").innerHTML = clicks; 
         }; 
        </script> 
        <button type="button" onClick="onClick()">30 min Tracker</button> 
       <p>Clicks: <a id="clicks">0</a></p> 
       </p> 
      </form> 
     </div> 
    </div> 
</div> 
<div id="projects"> 
    <div data-role="header"> 
     <h2>Projects</h2> 
    </div> 
    <div data-role="content"> 
     <div class="space" > 
      <form name="form2" method="post" action=""> 
       <p> 
        <label for="name">Project: </label> 
        <input type="text" name="name" id="name" placeholder="Project name"> 
       </p> 
       <p> 
        <script type="text/javascript"> 
         var track = 0; 
         function onClick() { 
         track += 1; 
         document.getElementById("track").innerHTML = track; 
         }; 
        </script> 
        <button type="button" onClick="onClick()">30 min Tracker</button> 
       <p>Clicks: <a id="track">0</a></p> 
       </p> 
      </form> 
     </div> 
    </div> 
</div> 
<div id="myLearning"> 
    <div data-role="header"> 
     <h2>MyLearning</h2> 
    </div> 
    <div data-role="content"> 
     <div class="space" > 
      <form name="form3" method="post" action=""> 
       <p> 
        <label for="name">Description: </label> 
        <input type="text" name="name" id="name" placeholder="Description"> 
       </p> 
       <p> 
        <script type="text/javascript"> 
         var clicks = 0; 
         function onClick() { 
         clicks += 1; 
         document.getElementById("clicks").innerHTML = clicks; 
         }; 
        </script> 
        <button type="button" onClick="onClick()">30 min Tracker</button> 
       <p>Clicks: <a id="clicks">0</a></p> 
       </p> 
      </form> 
     </div> 
    </div> 
</div> 
+3

爲什麼你的腳本混合與HTML這樣?如果你正確地安排了事情,它會讓事情變得更清楚,更清潔,更容易。此外,每個用於元素的「ID」應該是唯一的 - 您不能使用'id ='clicks''多個元素。 – Todd

+0

對不起,但你的問題還不清楚。請詳細說明你想達到的目標,因爲目前我還沒有任何線索。 (我要說的是,你正在創建多個名爲'onClick'的函數(這不是一個很好的名字),所以只有最後一個函數會存在) – freefaller

+0

你想讓它每個按鈕跟蹤它自己的點擊或者所有按鈕都會跟蹤相同的點擊次數。即按鈕1和2被點擊一次。應該按鈕顯示2或1每個人 – PhilVarg

回答

0

您將需要重構您的代碼。您可以遍歷每個設置「click」事件偵聽器的元素。它需要使用閉包實現,以便在返回外部函數後存在所有事件偵聽器。如果你不這樣做,只有最後一個事件監聽器會保持綁定。

或者,您可以使用jQuery。例如:

 // create list of cats 
     for (var cat of cats){ 
      list.append("<li class=\"list\">" + cat.name +"</li>"); 
     }; 
     // on click hooks the event to all list elements 
     list.on("click", ".list", function(){ 
      // do something 
     }); 
+4

jQuery尚未被標記。 –

+0

@JamieBarker這是一個替代..你不能讀 –

+3

我可以讀。也許如果我用另一種方式說:**海報不使用jQuery **。所以,也許你可能想,我不知道,將代碼重新分配到vanilla JavaScript中?如果您需要幫助,請嘗試[這個有用的網站](http://youmightnotneedjquery.com/)。 –

1

要保存您的數據,您可以使用原始對象作爲地圖。

每個按鈕都需要有一個唯一的ID來知道哪個按鈕已被點擊。

onClick功能可以被點擊按鈕的參數和使用按鈕ID保存點擊地圖

// Map <string, number> 
 
var clicks = {}; 
 

 

 
function onClick(element){ 
 
    var key = element.id; 
 
    
 
    // Init the value if not here 
 
    if (!clicks[key]){ 
 
     clicks[key] = 0; 
 
    } 
 
    
 
    clicks[key]++; 
 
    
 
    //Update the content of the next 'a' tag 
 
    document.querySelector ('#'+key+" + p a").innerHTML = clicks[key]; 
 
}
<button type="button" id="client" onClick="onClick(this)">30 min Tracker</button> 
 
<p>Clicks: <a class="clicks">0</a></p> 
 

 
<button type="button" id="project" onClick="onClick(this)">30 min Tracker</button> 
 
<p>Clicks: <a class="clicks">0</a></p>

+0

我嘗試使用上面的代碼,這裏是我在JSFiddle中嘗試過的,它仍然不能正常工作。我肯定錯過了什麼。 https://開頭的jsfiddle。net/xhL74n1x/ – user3192569

+0

這是因爲您需要將此代碼添加到您的html的'head'標記中,請參閱:https://jsfiddle.net/5cdrp79u/。在右側,您可以看到'沒有換行 - 在'中。你也不必把腳本標籤放在jsfiddle的javascript部分 – Hacketo

+0

非常好!非常感謝!!我的問題的其他部分是我的JS文件的順序。但現在所有的作品!謝謝你的幫助。 – user3192569