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...;
}

这个函数应该使用id为“editor”+唯一id(例如“editor24”)的每个textarea元素,并添加一个检测textarea中编辑的处理程序。它调用的函数editor_change需要一个我需要包含在处理程序中的参数“id”。创建处理程序时如何包含此参数?

4

3 回答 3

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 中提取数字。

于 2013-06-29T01:09:05.370 回答
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,这就是 data 参数在 jQuery 中的工作方式。

小提琴

于 2013-06-29T01:48:35.523 回答
0

提供id是在handler的范围内,并且在handler附加后不会改变,那么它不需要作为参数传递。

以下任一方法都可以:

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));
于 2013-06-29T01:34:20.573 回答