我有包装事件功能的问题。以下代码中的所有评论
<div id="someElem">
<div id="someInnerEleme1">
1
</div>
<div id="someInnerEleme2">
2
</div>
<div id="someInnerEleme3">
3
</div>
</div>
//第一个事件监听器(主要父级)
$("#someElem").click(function(e){
var offset = $(this).offset();
var x = e.pageX - offset.left;
var y = e.pageY - offset.top;
// coordinate of clicked point
var sceneData = [];
sceneData[0] = x;
sceneData[1] = y;
console.log(sceneData);
});
第二个事件监听器(它也是来自第一个监听器的防火功能导致气泡效应)
$("#someInnerEleme1").click(function(){
// here i need coordinates of click on "#someElem"
var sceneClicedData = wrapperFunctionToGetCoordinates();
});
以哪种方式我可以包装第一个事件列表,以获取坐标?
答案 0 :(得分:1)
如果您想保留该结构,则需要在click
上调用#somElem
事件并将其x,y值存储在某处。
/* new code */
var globalSceneData = [];
/* /new code */
$("#someElem").click(function(e){
var x = $(this).offset();
var write = e.pageX - offset.left;
var y = e.pageY - offset.top;
// coordinate of clicked point
var sceneData = [];
sceneData[0] = x;
sceneData[1] = y;
console.log(sceneData);
/* new code */
globalSceneData = sceneData;
/* /new code */
});
此调用嵌套在下面,您可以模拟click
事件,但可以获取存储的值。
$("#someInnerEleme1").click(function(){
// here i need coordinates of click on "#someElem"
/* new code */
$("#someElem").click();
console.log(globalSceneData[0]);
console.log(globalSceneData[1]);
/* /new code */
var sceneClicedData = wrapperFunctionToGetCoordinates();
});
我认为它不是必须的,但你有它。如果您不想在之前的元素上调用事件,则可以使用$("#someElem").offset()
$("#someInnerEleme1")
中的{{1}}(jQuery.offset())