首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >doubleclick的Jquery超时

问doubleclick的Jquery超时
EN

Stack Overflow用户
提问于 2016-08-21 00:06:22
回答 2查看 375关注 0票数 0

我有一个可点击的div,它应该首先显示一个文本指令,以便再次点击,以便触发ajax操作,这是在第一次单击后添加的新类名。此文本有超时,将更改回原始文本。

问题是,一旦文本返回到原始状态,实际的ajax fire操作也应该停止工作,但实际的类不会被删除。有什么建议吗?

我真正需要的是一种具有22秒超时的doubleclick。

​

代码语言:javascript
复制
function onlyfire() {
  $(".onlyfire").click(function() {
    var div = $(this);
    var original = $(this).html();
    div.html("Tap again");
    $(".onlyfire").addClass("fire");
    setTimeout(function() {
      $(div).html(original);
      $(".onlyfire").removeClass("fire");
    }, 2000);
    $(".fire").click(function(fire) {
      $.ajax({
        type: "POST",
        data: dataString,
        url: "something.php",
        cache: false,
        success: function(html) {
          div.html(html);
        }
      });
    });

    return false;
  });
};
代码语言:javascript
复制
<div class="onlyfire">
  Do Something
</div>

​

这是jsfiddle:https://jsfiddle.net/jngqzw7q/1/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-21 00:15:53

可以使用.one()并将event namespace作为参数,.off()引用event namespace

​

代码语言:javascript
复制
function handleClick(e) {
  var div = $(this).data("original", this.innerHTML);
  // var original = div.html();
  div.html("Tap again");
  $(".onlyfire").off("click").addClass("fire");
  // http://stackoverflow.com/questions/39057179/why-is-click-event-attached-to-classname-fired-after-classname-is-removed#comment65464000_39057261
  var fire = $(".fire");
  fire.one("click.fire", function() {
    alert("this should not be showing once the text is changed back to original");
  });
  setTimeout(function() {
    fire.off("click.fire");
    div.removeClass("fire")
    .html(div.data("original")).click(handleClick);
  }, 2000);
}

function onlyfire() {
  $(".onlyfire").click(handleClick);
};
onlyfire();
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div class="onlyfire">
  Do Something
</div>

​

票数 1
EN

Stack Overflow用户

发布于 2016-08-21 00:21:41

您可以在单击处理程序中使用if语句来查看是第一次单击还是第二次单击(通过检查类),并执行适当的操作:

​

代码语言:javascript
复制
function onlyfire() {
  $('.onlyfire').click(function() {
    var div = $(this);
    if (div.is('.fire')) { // second click
        alert("this is showing only when the text is 'Tap again'");
    } else { // first click
      var original = $(this).html();
      div.text("Tap again");
      div.addClass("fire").removeClass('.onlyfire');
      setTimeout(function(){ 
        $(div).html(original);
        $(".onlyfire").removeClass("fire");
      }, 2000);
    }
    return false;
  });
};
onlyfire();
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="onlyfire">
Do Something
</div>

​

注意:在事件处理程序中为另一次单击设置一个单击处理程序并不总是一个好主意。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39056183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档