【问题标题】:Touch Screen Tap fires onClick Event twice触摸屏点击触发 onClick 事件两次
【发布时间】:2019-08-18 17:00:10
【问题描述】:

我使用dojo 和 ESRI Javascript API 开发了一个 Javascript Web 应用程序。应用程序的主页是一个地图视图,用户可以在其中在地图上添加点。

在我的桌面网络浏览器上,当我单击地图时,会添加一个新点,如果我进行调试,我可以看到我的 onClick 处理程序只被调用一次。

在我的 iPad 上,当我点击地图时,会在完全相同的位置添加 2 个点。当我通过 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 事件。

【问题讨论】:

  • 我在使用 ESRI JavaScript API 时遇到了同样的问题。

标签: javascript onclick dojo touch dom-events


【解决方案1】:

我正在构建的应用程序中遇到完全相同的问题。我也在使用 ESRI Javascript API。

我觉得在地图、要素图层或其中一个 dijit 容器中必须有一个事件处理程序,它通过与单击不同的点击事件传递。

最后,我只是按照这里的描述来消除我的点击处理程序:http://unscriptable.com/2009/03/20/debouncing-javascript-methods/

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多