2011-11-25 60 views
2

通過編寫此基礎上this我試圖單擊事件處理程序添加到對象的數組:jQuery的數組中添加事件處理程序的對象

function addEventHandler(array, type, func) { 
     var len = array.length; 
     for (var i = 0; i < len; i++) { 
     array[i].bind(type, func); 
     } 
    } 

sections = $('#sponsorship > div .section') 

addEventHandler(sections, 'click', function() { 
     console.log(this); 
}); 

不過,我收到錯誤信息:

array[i].bind is not a function 

我只能在綁定方法上使用實際的選擇器嗎?有什麼建議麼?

+3

也許試試$(array [i])。bind – Megacan

+1

看看[each()](http://api.jquery.com/each/) - 而不是你的循環 – ManseUK

回答

5

您可能需要你的元素轉換爲jQuery對象。

$(array[i]).bind 
+0

這很好,謝謝! – redconservatory

+1

這個解決方案有點奇怪,因爲它需要一個jQuery對象,將它變成一個常規的JS對象,然後將其轉換回jQuery對象。退房Royi Namir的解決方案。 – Jasper

3

試試這個

function addEventHandler(array, type, func) { 
     var len = array.length; 
     for (var i = 0; i < len; i++) { 
     array.eq(i).bind(type, func); 
     } 
    } 
+0

我很好奇,什麼這是應該修復? – Jasper

+0

@jasper數組是jquery元素的數組。當他對數組[0]他得到一個項目,這是NOT jQuery,但純JAVASCRIPT對象,他可以使用jQuery的BIND方法。但如果他使用array.eq(i) - 他可以將該項目視爲jquery項目併爲其綁定方法。 –

+0

@Jasper http://jsfiddle.net/jfUpB/1/我自己看看你自己的例外 –

0
$('#sponsorship > div .section').click(function (event) { 
    console.log(event.target); 
}); 

$('#sponsorship > div .section').each(function(index,item) { 
    $(item).click(function (event) { 
     console.log(event.target); 
    }); 
}); 

請告訴我問題呢?

0

我會用jQuery的$ .each函數替換for(int ...),因爲您會處理數組的項目,而不是嘗試按索引檢索項目。此外,使用任何jQuery的功能,數組中的對象應該是一個jQuery對象,所以我應該這樣做:

function addEventHandler(array, type, func) { 
    var len = array.length; 
    $(array).each(function(index, item) { 
     $(item).bind(type, func); 
    }); 
} 
1

你所得到的錯誤消息正是你試圖運行得到什麼jQuery在非jQuery對象上運行。

function addEventHandler(array, type, func) { 
     var len = array.length; 
     for (var i = 0; i < len; i++) { 
     array.eq(i).bind(type, func); 
     } 
    } 

sections = $('#sponsorship > div .section') 

addEventHandler(sections, 'click', function() { 
     console.log(this); 
}); 

更改array[i].bind(type, func);array.eq(i).bind(type, func);訪問jQuery對象,而不是一個普通JS對象,這將刪除你的錯誤:您可以輕鬆地通過使用您的索引for循環來訪問array變量jQuery的對象解決這個問題正在得到。

這裏是上述改變了代碼的的jsfiddle:http://jsfiddle.net/jfUpB/1/

0

.each()是表現重,並認爲即使是jQuery的標準,「懶惰」。

相關問題