GWT 计时器取消不起作用

2024-04-07

我正在尝试编写代码来使用 GET 和 GETQuery 区分单击和双击。我明白了here http://jsfiddle.net/KpCwN/4/。所以我将它翻译成 GWT,如下所示:(我的应用程序不能有全局变量,所以我用元素属性来完成该部分):

$("img").live("click", new Function() {
         public boolean f(Event event) {
            String clicksString = $(event).attr("clicks");
            int clicks = Integer.parseInt(clicksString);
            clicks++;
            $(event).attr("clicks",String.valueOf(clicks));
            Timer t = new Timer() {

                @Override
                public void run() {
                    Window.alert("Click");
                    $(event).attr("clicks","0");
                }
            };

            if (clicks == 1) {
              t.schedule(200);
            }

            else {
              t.cancel();
              $(event).attr("clicks","0");
              Window.alert("Double Click");
            }
            return true;
          }
});

在这里,当单击图像时,会弹出一个警报,显示单击,如果用户双击(200毫秒内),它应该弹出双击。单击时效果很好,但双击时,即使双击单击时会弹出警报Ok为了摆脱它,我找到了单击警觉等待被摆脱。

不知何故,我认为t.cancel()双击时不会触发。谁能告诉我如何解决这个问题?

Update:

接受的解决方案适用于警报,但是当我需要时event参数也一样,需要稍微调整一下。这样做之后,问题再次出现,计时器没有被清除,现在我收到两个警报,双击 and Click..:

          $("img").live("click", new Function() {
              int clicks = 0;

            public boolean f(Event event) {

                  Timer t = new Timer() {

                    @Override
                    public void run() {
                        clicks = 0;
//                            Here I need the event paramater

                    }
                };
                if (clicks++%2 == 0) {
                    t.schedule(5000);
                }
                else {
                    t.cancel();
                    clicks = 0;
 //                       Here also I need the event paramater
                }
                return true;
            }
          });

由@Manolo 更新:根据我下面的评论,最后的代码应该是:

      $("img").live("click", new Function() {
        int clicks = 0;
        Event event;
        Timer t = new Timer() {
           @Override
            public void run() {
               // Use the event
               event....
            }
        };
       public boolean f(Event event) {
            this.event = event;
            if (clicks++%2 == 0) {
                t.schedule(5000);
            } else {
                t.cancel();
                // Use the event
                event....
            }
            return true;
        }
      });

以下代码与您所说的 jsfiddle 示例中的代码完全相同:

  $("img").click(new Function() {
    boolean b = false;
    Timer t = new Timer() {
      public void run() {
        Window.alert("Click");
      }
    };
    public void f() {
      if (b = !b) {
        t.schedule(200);
      } else  {
        t.cancel();
        Window.alert("Double Click");
      }
     }
  });

除非您之前曾将事件沉入该元素,否则阻止默认片段是不必要的,但在这种情况下,代码应该是:

  $("img").dblclick(new Function() {
    public boolean f(Event e) {
      return false;
    }
  });

EDITED: 如果您希望每个匹配元素都有唯一的变量,最好的方法是创建与元素一样多的函数。使用GQuery.each()是更简单的方法:

  $("img").each(new Function() {
    public void f() {
      $(this).click(new Function() {
        boolean b = false;
        Timer t = new Timer() {
          public void run() {
            Window.alert("Click");
          }
        };
        public void f() {
          if (b = !b) {
            t.schedule(200);
          } else  {
            t.cancel();
            Window.alert("Double Click");
          }
         }
      });
  }});

您甚至可以只使用一个函数并在元素中存储变量,但您不仅应该像在查询中假装那样存储计数器,还应该存储每个元素的计时器:

  $("img").click(new Function() {
    public void f() {
      boolean b = $(this).prop("c", Boolean.class);
      Timer t = $(this).prop("f");
      if (t == null) {
        t = new Timer() {
          public void run() {
            Window.alert("Click");
          }
        };
        $(this).prop("f", t);
      }
      if (b = !b) {
        t.schedule(200);
      } else  {
        t.cancel();
        Window.alert("Double Click");
      }
      $(this).prop("c", b);
     }
  });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GWT 计时器取消不起作用 的相关文章

随机推荐

  • 使用 TH QuasiQuote 中的 DataKinds 生成类型注释

    在使用模板 haskell 的 haskell 项目中 我尝试生成一个具有类型注释作为幻像类型的表达式 一个简单的例子是这样的情况DataKinds and KindSignatures like LANGUAGE DataKinds Ki
  • 使用 sf 列调整 Leaflet (R) 中的边界

    我正在 Shiny 中制作一个小应用程序 它保存国家和地区的数据 用户可以在其中选择一个区域 然后的想法是 我在应用程序中拥有的传单地图将放大并聚焦于所选区域 即用户单击 欧洲 地图会放大到欧洲 我不知道应该如何使用这些简单的功能geome
  • 如何在 Windows Azure Active Directory 身份验证后获取访问令牌

    我们已经使用 url 中给出的流程成功实现了活动目录身份验证http msdn microsoft com en us library windowsazure dn151790 aspx http msdn microsoft com e
  • ruby - 简化字符串乘法连接

    s 是一个字符串 这看起来很冗长 我怎样才能简化它 if x 2 z s elsif x 3 z s s elsif x 4 z s s s elsif x 5 z s s s s elsif x 6 z s s s s s Thanks
  • Ubuntu - 如何判断CPU应用程序当前是否正在使用AVX或SSE?

    我目前在许多具有 GPU 的服务器上运行 BOINC 服务器运行 GPU 和 CPU BOINC 应用程序 由于 AVX 和 SSE 在 CPU 应用程序中使用时会降低 CPU 频率 因此我必须选择一起运行哪个 CPU GPU 因为某些 G
  • 上传失败:超出配额:您的表超出了每个表的导入或查询附加配额。了解更多信息

    我正在尝试将旧的备份数据上传到 bigquery 表 它有时会失败并出现以下错误 不清楚超出了哪个配额 我们如何找到它或解决此错误 errorResult message Quota exceeded Your table exceeded
  • 散点图标记大小与轴值成正比 - 为什么对于方面=“等于”,x 轴和 y 轴的像素数不同?

    据我所知 我的问题与这个帖子 https stackoverflow com questions 16896244 matplotlib scatter plot symbol size based on pixel distance 我需
  • 熊猫在我的数据中第一天重新采样

    我在 pandas 数据框中导入了雅虎财经每日股票价格 我想用 resample 通过获取每个月第一个每日报价的价格将其转换为每月股票价格 resample MS how first 返回每个月的正确价格but它将指数更改为每月的第一天 而
  • 蓝牙低功耗广告扫描、频道信息或选择

    我使用 bluez 编写了一个应用程序 用于扫描 BLE 广告数据 该应用程序当前接收广告消息没有任何问题 对于广告消息 BLE 使用 37 38 和 39 三个通道发送消息 每个通道使用不同的频率 当应用程序接收数据时 我希望能够确定在哪
  • 如何在自定义视图中使用行重修改器?

    我正在尝试通过按钮制作屏幕键盘 并尝试使用按钮功能来执行此操作有点烦人 因为我无法设置这样的权重 Composable fun MyKeyboardButton text String Button onClick TODO modifie
  • Ajax 调用未以字符串形式返回正确的结果

    我的ajax调用 我没有得到所需的字符串响应 任何人都可以在这方面帮助我 提前致谢 function Function1 alert In Ajax Call ajax type POST url abc aspx MyFunction1
  • 以编程方式滚动 UIScrollView

    我有一个UIScrollView其中有几个观点 当用户轻弹手指时 视图会根据手指轻弹的方向向右或向左滚动 基本上我的代码的工作方式与 iPhone 照片应用程序类似 现在 有没有一种方法可以让我以编程方式执行相同的操作 以便我最终得到一个通
  • 比较两个列表<>

    我有 gridview 控件 上面有一个复选框 当我点击 保存 按钮时 我能够找到已选中的复选框 并且到目前为止我能够做得很好 但问题是 假设用户尝试取消选中复选框 那么我将如何跟踪更改并将其保存到已选中的数据库中 有什么帮助吗 所以在这方
  • mpegts 中的 pts 和 pcr 值有限制吗?

    据我所知 PCR 存储在 mpegts 容器中的 42 位中 PTS 存储在 33 位中 So Max value for PCR is 2 42 4398046511104 Max value for PTS is 2 33 858993
  • [Firebase Messaging]:应用程序在后台时未调用后台消息处理程序方法?

    我正在开发一个使用 FCM 推送通知的应用程序 当应用程序在后台或终止并接收新通知时 我需要将此通知的数据保存在本地 SQLITE 中 而无需单击通知或再次重新打开应用程序 除非单击 否则不会在应用程序中读取通知 有什么建议么 这是我的No
  • 如何将阴影置信区间添加到具有指定值的线图中

    我有一个汇总数据的小表 其中包含四个类别的比值比 置信上限和下限 每个类别内有六个级别 我想使用 ggplot2 生成一个图表 它看起来与指定 lm 时创建的通常图表类似 它是 se 但我希望 R 仅使用表中预先指定的值 我已经成功创建了带
  • iOS 7 以编程方式按应用程序 VPN

    我正在开发一个 iOS 7 应用程序 我想知道 每应用程序 VPN 功能是否是 手动 激活的 如位置服务 您可以选择哪个应用程序可以或不可以 或者我可以设置它通过应用程序内的代码 环顾网络 我发现有关它的信息很少 苹果的公告也没有明确说明
  • 为什么某些 API 提供商需要 API 密钥?

    多个 Web 服务 API 需要您注册 API 密钥 例如 UPS Web 服务需要一个密钥 该密钥包含在对其服务的调用中 除了用户名和密码 提供商使用此密钥做什么 也许 UPS 是唯一一家同时需要 API 密钥和用户名 密码的公司 一个想
  • 匹配字符的第一个唯一实例[重复]

    这个问题在这里已经有答案了 我正在尝试匹配only字符串中字符的第一个实例 例如sdtmig 3 1 2 with XPath 替换 https www w3 org TR xpath functions func replace并将其替换
  • GWT 计时器取消不起作用

    我正在尝试编写代码来使用 GET 和 GETQuery 区分单击和双击 我明白了here http jsfiddle net KpCwN 4 所以我将它翻译成 GWT 如下所示 我的应用程序不能有全局变量 所以我用元素属性来完成该部分 im