2009-07-22 109 views
13

我正在構建一個捕獲鼠標點擊的小應用程序。我在jquery中編寫了原型,但由於它是一個專注於速度的小應用程序,因此將jquery嵌入到僅使用一個函數中會是一種矯枉過正。純jQuery相當於jquery click()?

我試着去適應從JavascriptKit這個例子:

document.getElementById("alphanumeric").onkeypress=function(e){ 
    //blah..blah..blah.. 
} 

但是當我試圖

document.getElementsByTagName("x").onclick 

我在做什麼錯了,它沒有工作?

回答

9

假設你有一個清單p標籤的你想捕捉點擊p標籤:

var p = document.getElementsByTagName("p"); 
for(var i=0; i<p.length; i++){ 
p[i].onclick = function(){ 
    alert("p is clicked and the id is " + this.id); 
} 
} 

入住在這裏的例子更加清晰: http://jsbin.com/onaci/

+0

感謝您的幫助。這工作。 – hoball 2009-07-23 04:53:44

0
document.getElementsByTagName("x") 

返回具有標記名'x'的元素數組。

您必須對返回數組中的每個元素都有正確的事件。

8

在你的榜樣,你正在使用的getElementsByTagName,這將返回DOM元素的數組,你可以遍歷數組和onclick處理程序分配給每個元素,例如:

var clickHandler = function(){ 
    alert('clicked!'); 
} 

var elements = document.getElementsByTagName('div'); // All divs 

for(var i = 0; i<elements.length; i++){ 
    elements[i].onclick = clickHandler; 
} 
+0

感謝您的幫助。這工作。 – hoball 2009-07-23 04:53:01

1

它看起來有點像你想念的不僅僅是jQuery的點擊功能。您還會錯過jquery的選擇器引擎,鏈接和跨對象集合的自動迭代。多花點功夫,你也可以最低限度地重現這些事情。

var myClickCapture = function (selector) { 
    var method, name,iterator; 
    if(selector.substr(0,1) === "#") { 
     method = "getElementById"; 
     name = selector.substr(1); 
     iterator = function(fn) { fn(document[method](name)); }; 
    } else { 
     method = "getElementsByTagName"; 
     name = selector; 
     iterator = function(fn) { 
      var i,c = document[method](name); 
      for(i=0;i<c.length;i++){ 
      fn(c[i]); 
     }; 
    }; 
    myClickCapture.click = function (fn){ 
     iterator(function(e){ 
      e.onclick=fn; 
     }) 
    } 

    return myClickCapture; 

} 

我沒有測試的代碼,但在理論上,它可以讓你像這樣:

myClickCapture("x").click(function(e){ alert("element clicked") }); 

希望這給你的各種東西的jQuery感在幕後做。

+1

感謝您的建議。我將爲了未來的發展而節省下來。 – hoball 2009-07-23 04:54:20