从事件侦听器函数返回数据

时间:2014-05-24 11:11:26

标签: javascript jquery html

我有包装事件功能的问题。以下代码中的所有评论

<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();    
  });

以哪种方式我可以包装第一个事件列表,以获取坐标?

1 个答案:

答案 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()