2011-12-04 46 views
0

我想要一個javascript函數來點擊所有在我的窗體中具有'divResults'id的div,但顯然它不起作用,沒有錯誤,但沒有任何buldges。請指教。謝謝。Javascript +點擊所有div

<a href="javascript:clickAllDivs()">Expand All</a> | <a href="javascript:clickAllDivs()" >Collapse All</a> 

的JavaScript:

 function clickAllDivs() { 
         var els = document.getElementsByTagName('div'); 
         var i = els.length; while (i--) 
          if (els[i].id == 'divResults') { 
          //alert("I am in"); //Check if div is eating this function 
          els[i].click(); 
         } 
        } 

回答

1

那麼有幾個問題,首先,你應該只有一個元素在你的頁面中有一個divResults的id,id是唯一的。

要找到與特定ID的元素,你可以這樣做:

var el = document.getElementById('divResults'); 

如果您想了解更多內容,請嘗試在循環使用的一類,並檢查通過className,如:

while (i--) { 
if (els[i].className == 'yourClassName') { 
    //code 
    } 
} 

其次,調用els[i].click();意味着您已經爲該元素設置了一個名爲click的屬性併爲其分配了一個函數。 如果你這樣做了,那麼代碼是正確的,如果不檢查你是如何結合的情況下,例如,如果你正在做

document.getElementById('divResults').onclick = function(){}; //bind click event 

,那麼你應該做的

els[i].onclick(); 

你可以還使用jQuery在一個非常簡單的方式這樣做,信息here

1

你似乎對id混淆。

  • id獨特。只能有一個元素與特定的id,這就是爲什麼你的代碼不能從根本上工作。

您可能在尋找class,而不是id

閱讀this article瞭解更多關於兩者之間差異的信息。


至於你當前錯誤,.click()是不是原生的JavaScript函數,如果我記得正確的。你在使用像jQuery這樣的JavaScript庫嗎?

1

首先,這沒有任何意義,因爲您只應該在具有給定ID的頁面中擁有一個對象,但您試圖找到具有相同ID的所有對象。

如果你真的想找到多個元素,那麼我建議你使用一個普通的類名稱作爲所需的元素。

其次,.click()方法不適用於所有瀏覽器的div元素。例如,它僅在Firefox 5中的所有元素上實現。最好將代碼放入一個函數中,該函數在點擊操作後直接調用函數(而不是模擬點擊)並傳遞它期望的對象。

1

您可以使用element.dispatchEvent方法...但我不認爲它支持所有的瀏覽器。

檢查這個環節, element.dispatchEvent


在jQuery中,雖然你有trigger方法基本上調用所有的一線明星,但開不真正進行點擊操作。

$('#divResults').trigger('click') 
0

試試這個:

<html> 
    <head> 
     <script type="text/javascript"> 
      function clickItem(divObj) { 
       if (divObj.click) { 
        divObj.click() 
       } else if(document.createEvent) { 
        var evt = document.createEvent("MouseEvents"); 
        evt.initMouseEvent("click", true, true, window, 
         0, 0, 0, 0, 0, false, false, false, false, 0, null); 
        var allowDefault = divObj.dispatchEvent(evt); 
       } 
      } 

      function clickAllDivs() { 
       var els = document.getElementsByTagName('div'); 
       var i = els.length; 
       while (i--) 
        // you'll need to keep id unique 
        if (els[i].id.indexOf('divResults') == 0) { 
         //alert("I am in"); //Check if div is eating this function 
         clickItem(els[i]); 
        } 
      } 
     </script> 
    </head> 
    <body> 
     <a href="javascript:clickAllDivs();">Expand All</a> | <a href="javascript:clickAllDivs()" >Collapse All</a> 
     <div id="divResults1" onclick="alert('this was clicked through code');">Div to click</div> 
     <div id="divResults2" onclick="alert('this was also clicked through code');">Div to click</div> 
    </body> 
</html>