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。这就产生了大量的复制品。