Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加使用对象方法[CodePen提供]的点击事件处理程序_Javascript_Oop_Leaflet - Fatal编程技术网

Javascript 添加使用对象方法[CodePen提供]的点击事件处理程序

Javascript 添加使用对象方法[CodePen提供]的点击事件处理程序,javascript,oop,leaflet,Javascript,Oop,Leaflet,我正在尝试为传单构建一个包装器javascript类。我需要将点击事件绑定到地图(以及弹出窗口中的按钮旁边),但我真的不知道该怎么做。谁能提供一些指导。我根本无法让类方法selectorClick()运行。我还需要能够将参数传递给它。如果您能提供任何帮助,我将不胜感激 代码@ 因此,考虑到这一点,我正试图通过外部js文件运行尽可能多的代码,并在使用它时发送所有动态值(如上所述)。因此,要回答您的问题,我需要传入url和消息,以便在地图单击时,我有数据正确创建弹出窗口。分配self=this实际上

我正在尝试为传单构建一个包装器javascript类。我需要将点击事件绑定到地图(以及弹出窗口中的按钮旁边),但我真的不知道该怎么做。谁能提供一些指导。我根本无法让类方法selectorClick()运行。我还需要能够将参数传递给它。如果您能提供任何帮助,我将不胜感激

代码@


因此,考虑到这一点,我正试图通过外部js文件运行尽可能多的代码,并在使用它时发送所有动态值(如上所述)。因此,要回答您的问题,我需要传入url和消息,以便在地图单击时,我有数据正确创建弹出窗口。

分配
self=this实际上设置了类所定义的范围,而不是您期望的范围。如果检查代码笔中的值,应该会看到它实际上是窗口对象

试着用
this
代替
self

编辑:


您还需要为click侦听器提供一个函数。尝试:
this.elem.on(“单击”、()=>self.selector单击(url、消息))

有很多方法可以处理这样的事情。。这完全取决于你想要完成什么

您希望将哪些参数传递给
选择器或单击
方法?您想用
选择或单击
来完成什么

类映射{
建造师(id){
this.elem=L.map(id).fitWorld().zoomIn();
this.name=id;
this.theme=”http://b.tile.openstreetmap.fr/osmfr/{z} /{x}/{y}.png”;
this.url=“”;
this.message=“”;
this.selectorClick=this.selectorClick.bind(this);
this.elem.on(“单击”,this.selector单击);
L.Tillelayer(这个主题{
属性:“映射数据©;贡献者”,
最大缩放:18
}).addTo(此.elem);
}
选择器(url、消息){
this.url=url;
this.message=消息;
}

selectorClick(event){//需要向其传递哪些参数?错误的初始化类映射{self=this;这里永远是窗口。使用这个而不是self。不需要这个self。做同样事情的老方法。否则在构造函数中初始化。我刚刚添加了一个编辑,它解释了正在发生的事情并回答了您的问题。谢谢!您可以忽略我的编辑。我刚刚重构了代码笔链接并使其工作。所以我对ho很好现在就可以了。我可以问一下,你有没有一个不需要存储一堆属性的解决方案?没有办法像参数一样传递它们吗?谢谢你的时间。这完全取决于你想做什么。我仍然不知道你想传递哪些参数。你将使用这些参数做什么?最终目标是什么?我想知道了解所有这些。我仍然不明白你想发布什么数据或为什么要发布。你的最终目标是什么?当用户点击地图发布他们点击的坐标时,目标是什么?这里的目标是什么。@hendr1x我刚刚更新了我的答案,以显示如何从
onclick
事件中获取数据。没有任何问题我希望通过你自己的参数-这就是为什么我想了解你的目标。。
class Map {
    self = this;
    name = '';
    elem;
    theme = 'http://b.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png';

    constructor(name) {
        self.name = name;
        self.elem = L.map(name).fitWorld().zoomIn();
        L.tileLayer(this.theme, {
            attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',
            maxZoom: 18,
        }).addTo(self.elem);
    }

    selector(url, message) {
        self.elem.on("click", self.selectorClick(url, message));
    }

    selectorClick(url, message) {
        alert(message);
    }
}
var mapMap = new Map('map');
mapMap.selector('/index.php', 'test message');
$this->c->map->init('mapElem');
$this->c->map->selector('/example/submit/index.php', 'You clicked this example');

which eventually echo's the following

echo "window." . $name . "Map = new Map('" . $name . "');";
echo $name . "Map.selector('" . $url . "', '" . $message . "');";