Javascript jQuery:如何在事件发生之前执行代码,并在事件中将结果作为参数?

Javascript jQuery:如何在事件发生之前执行代码,并在事件中将结果作为参数?,javascript,jquery,events,Javascript,Jquery,Events,我有一组元素,可以动态添加: <div id="some-id-1" data-id="1" class="some"> <canvas /> </div> <div id="some-id-2" data-id="2" class="some"> <canvas /> </div> <div id="some-id-3" data-id="3" class="some"> <canvas /> &l

我有一组元素,可以动态添加:

<div id="some-id-1" data-id="1" class="some">
<canvas />
</div>
<div id="some-id-2" data-id="2" class="some">
<canvas />
</div>
<div id="some-id-3" data-id="3" class="some">
<canvas />
</div>
...
在每个事件中,我都需要这个额外的行来获取元素id,我单击了它,它是对象数组的索引。我想摆脱这条线

有没有方法调用
var idx=$(this).parents('.some').data('id')在事件之前并将
idx
作为参数传递到事件

或者以任何其他方式组织代码,而不是编写
var idx=$(this).parents('.some').data('id')无处不在。

试试:

尝试:


我想你应该试试下面的东西。它将处理每次画布单击

$('body')
    .on('click', 'canvas', function (event) {
        var idx = $(this).parents('.some').data('id');
        console.log(idx);
        wrap[idx].action1(event);

    });

我想你应该试试下面的东西。它将处理每次画布单击

$('body')
    .on('click', 'canvas', function (event) {
        var idx = $(this).parents('.some').data('id');
        console.log(idx);
        wrap[idx].action1(event);

    });
数据id
复制到画布

$('.some canvas').each(function() {
    $(this).data('id', $(this).parents('.some').data('id'));
});
然后代码可以是这样的

$('body')
    .on('click', 'canvas', function (event) {
        wrap[$(this).data('id')].action1(event);
    })
    .on('mousemove mouseout', 'canvas', function () {
        wrap[$(this).data('id')].action2();
    })
    .on('mousemove', 'canvas', function (event) {
        wrap[$(this).data('id')].action3(event);
    });
数据id
复制到画布

$('.some canvas').each(function() {
    $(this).data('id', $(this).parents('.some').data('id'));
});
然后代码可以是这样的

$('body')
    .on('click', 'canvas', function (event) {
        wrap[$(this).data('id')].action1(event);
    })
    .on('mousemove mouseout', 'canvas', function () {
        wrap[$(this).data('id')].action2();
    })
    .on('mousemove', 'canvas', function (event) {
        wrap[$(this).data('id')].action3(event);
    });

那么,您没有得到
idx
值的问题是什么?顺便说一句,HTML中的
canvas
start标记在哪里?不可能,代码如何“知道”哪个canvas元素“即将”触发事件?@DeepakBiswal重复问题。这是一个虚拟模板,
canvas
@JaromandaX做了一点更新,没有问题。在这种情况下,可能有更好的方法来组织代码,以避免重复?您能显示wrap[]吗?action1 action2 action3代码?最好有一个带有参数idx的动作函数;newAction(idx)那么您没有获得
idx
值有什么问题?顺便说一句,HTML中的
canvas
start标记在哪里?不可能,代码如何“知道”哪个canvas元素“即将”触发事件?@DeepakBiswal重复问题。这是一个虚拟模板,
canvas
@JaromandaX做了一点更新,没有问题。在这种情况下,可能有更好的方法来组织代码,以避免重复?您能显示wrap[]吗?action1 action2 action3代码?最好有一个带有参数idx的动作函数;我想你有点误解了。我可以处理
canvas
点击。我有几件事跟他们有关。我想跟踪每个画布上的每个事件。这就是为什么在每个事件的一开始,我需要找到对象idx。这会产生大量的重复。我想你有点误解了。我可以处理
canvas
点击。我有几件事跟他们有关。我想跟踪每个画布上的每个事件。这就是为什么在每个事件的一开始,我需要找到对象idx。这就产生了大量的复制品。