2013-06-29 44 views
0
$('#editor'+id).on("click dbclick mousedown mousemove mouseover mouseout mouseup keydown keypress keyup blur change focus select", {param1:id}, editor_change); 

function editor_change(id){ 
...does stuff...; 
} 

該函數假定每個textarea元素都帶有id「editor」+一個唯一id(例如「editor24」),並添加一個檢測textarea中編輯的處理程序。它調用「editor_change」的函數需要1個參數「id」,我需要在處理程序中包含這個參數。創建處理程序時如何包含此參數?在jquery中使用on()時,如何使用帶參數的函數作爲處理函數?

+0

你可以從'this.id'中提取id號。但爲什麼不使用普通類呢?那麼你可以通過索引來定位目標。 – elclanrs

回答

1

由於有實際上是一個內置的方法,以精確地這種方式傳遞數據,我會後的答案,因爲我認爲這是你要找的是什麼,而不是如何從一個元素ID提取號碼:

$('#editor'+id).on("click ...more events", {param1:id}, editor_change); 

function editor_change(event){ 
    var passed_id = event.data.param1; 
    alert(passed_id); 
} 

正如你看到的,傳遞的對象是作爲event.data,這就是數據參數在jQuery中的工作原理。

FIDDLE

1

你不需要這個參數。只要這樣做:

$('#editor'+id).on("click dbclick mousedown mousemove mouseover mouseout mouseup keydown keypress keyup blur change focus select", function editor_change(event){ 
var id = parseInt(this.id.replace(/[^\d]/g, ''), 10); 
}); 

這樣做,你是從元素id中提取數字。

+0

這是可以的,但它可以簡化。例如'[^ \ d] == \ D'。或者更短'var id = + this.id.match(/ \ d + /)[0]' – elclanrs

0

提供id在處理程序的範圍內,並且在附加處理程序後不會更改,則不需要將其作爲參數傳遞。

下列任一將工作:

var id = ...; 
function editor_change() { 
    //id is available here 
} 
$('#editor'+id).on("click etc", {param1:id}, editor_change); 

var id = ...; 
$('#editor'+id).on("click etc", {param1:id}, function() { 
    //id is available here 
}); 

其他方案也存在,在這種id將在範圍之內。

如果id可能改變(例如,它是一個循環內分配)附加處理程序之後,則:

var id = ...; 
$('#editor'+id).on("click etc", {param1:id}, function() { 
    return function editor_change() { 
     //id is available here 
    }; 
}(id)); 
相關問題