jquery事件委托的回调函数中调用全局变量的简单方法

问题:在用openlayers3开发GIS系统时,出现一个问题,代码片段如下:
//鼠标右键添加点击事件
    $(map.getViewport()).on("contextmenu", function(event){
        map.removeInteraction(draw);
        var pixel = map.getEventPixel(event.originalEvent);//获取鼠标当前像素点
        var hit = map.hasFeatureAtPixel(pixel);  //通过像素点判断当前鼠标上是否有图形 
        var coordinate = map.getEventCoordinate(event);//获取鼠标坐标
        console.log(coordinate);
        event.preventDefault();       //取消右键默认行为
        //if(hit){
        $("#contextmenu_container ul").html("<li><a class='update_feature'>更改坐标</a></li>"+
            "<li><a class='delete_feature'>删除要素</a></li>"+
            "<li><a class='copy_feature'>复制要素</a></li>"+
            "<li><a class='paste_feature'>粘贴要素</a></li>"+
            "<li><a class='edit_feature'>编辑属性</a></li>");
        menu_overlay.setPosition(coordinate);//在鼠标位置展示menu_overlay
            
        //}else{
        //    menu_overlay.setPosition(undefined);//将menu_overlay隐藏
        //}
        
        
        
        // 删除要素
        $("a.delete_feature").on("click",delete_feature);
        //更改坐标
        $("a.update_feature").on("click",update_feature);
        //复制要素
        $("a.copy_feature").on("click",copy_feature);
        //粘贴要素
        $("a.paste_feature").on("click",paste_feature);
        //编辑要素的属性
        $("a.edit_feature").on("click",edit_feature);


        //select.getFeatures().clear();//鼠标右键之后取消要素的高亮选中效果
    });
    
    //右键为建筑物添加立面计算--此边
    function vertical_edge(){
        menu_overlay.setPosition(undefined);
        if(select.getFeatures().getLength()>0){
            console.log(coordinate);  //显示结果为undefined
        }
        select.getFeatures().clear();
    }
    上述代码片段中$("a.this_edge").on("click",vertical_edge); //为此边添加建筑物立面计算,在回调函数中console.log(coordinate);的输出结果为undefined,因为这种写法回调函数中并不能调用全局变量,改正之后:
    将上面事件委托代码换成$("a.this_edge").on("click",{coordinate:coordinate},vertical_edge); 
    回调函数内部处理:
    function vertical_edge(event){
        menu_overlay.setPosition(undefined);
        if(select.getFeatures().getLength()>0){
            console.log(event.data.coordinate);
        }
        select.getFeatures().clear();
    }
    这样的话就可以访问函数之外的全局变量了。。。
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值