我使用dojo
和ESRI Javascript API开发了一个Javascript Web应用程序。应用程序的主页是一个Map视图,用户可以在其中添加Map上的点。
在桌面Web浏览器上,当我单击Map时,会添加一个新点,如果进行调试,我可以看到onClick
处理程序只被调用了一次。
在我的iPad上,当我点击Map时,会在完全相同的位置添加两个点。当我通过MacBook Pro上的Safari在iPad上调试应用程序时,我可以看到onClick
处理程序被调用了两次。在进一步调试后,我确保创建onClick
处理程序的代码只被调用了一次。
startEditing : function(template) {
main.selectHandle.pause();
main.moveHandle.pause();
var drawingTool = template.template.drawingTool;
switch(drawingTool) {
case FeatureTemplate.TOOL_POINT:
drawingTool = Draw.POINT;
break;
}
this.drawEndHandle = on(this.drawingToolbar, "draw-end", lang.hitch(this, this.createFeature, template));
this.drawingToolbar.activate(drawingTool);
},
stopEditing : function() {
this.drawingToolbar.deactivate();
this.drawEndHandle.remove();
main.selectHandle.resume();
main.moveHandle.resume();
},
createFeature : function(template, evt) {
var featureLayer = template.featureLayer;
template = template.template;
var prototype = template.prototype;
var geometry = evt.geometry;
var graphic = new Graphic(prototype.toJson());
graphic.setGeometry(geometry);
this.initAttributes(graphic, featureLayer).then(function() {
var features = [graphic];
featureLayer.applyEdits(features).then(function(addResults) {
var objectIds = array.map(addResults, function(addResult) {
return addResult.objectId;
});
var q = new Query();
q.objectIds = objectIds;
featureLayer.selectFeatures(q).then(function(features) {
main.openForm(features);
});
});
});
},
上面startEditing
函数中的drawingToolbar
由ESRI Javascript API提供,但在内部处理onClick
事件,并将其传递到我在代码中处理的onDrawEnd
事件。我有其他代码直接处理onClick
事件,它也会触发两次。
更新
我刚刚在我的Android智能手机上测试了同样的功能,它也是一次点击就会触发onClick
事件两次。
1条答案
按热度按时间k2fxgqgv1#
我在我正在构建的一个应用程序中遇到了完全相同的问题。我也在使用ESRI Javascript API。
我觉得在Map、要素图层或dijit容器中必须有一个事件处理程序,它传递沿着tap事件与click事件不同。
最后,我只是按如下所述对我的点击处理程序进行去抖:http://unscriptable.com/2009/03/20/debouncing-javascript-methods/