2016-08-20 41 views
0

我有一個可點擊的div,它應該首先顯示一條文本指令以再次點擊以觸發ajax動作,這是在第一次點擊後添加的新類名下的。這段文字有一個超時,並且會改回原來的。雙擊的jquery超時

問題是,一旦文本回到原來的實際ajax火災行動也應該停止工作,但實際的類不會被刪除。有什麼建議麼?

我真正需要的是一種具有2秒超時了DoubleClick ..

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; 
 
    }); 
 
};
<div class="onlyfire"> 
 
    Do Something 
 
</div>

這裏是的jsfiddle: https://jsfiddle.net/jngqzw7q/1/

+0

您是否想讓div在某個時間點擊不可點擊? –

+0

[.on('click')vs .click()]之間的差異可能重複(http://stackoverflow.com/questions/9122078/difference-between-onclick-vs-click) – Sherif

+0

@ZaheerAhmed我想使它只可用於那些2秒。第一次點擊只顯示指令再次點擊..它基本上是一個雙擊..我 – 120382833

回答

1

您可以使用.one()eventnamespace作爲參數,參考.off()eventnamespace

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();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script> 
 
<div class="onlyfire"> 
 
    Do Something 
 
</div>

+0

不工作..一旦文本回來做一些事情,我再次點擊我不應該看到警報..要看到警報,我需要點擊做某事,然後再次點擊第一個2秒.. – 120382833

+0

_「要看到警報我需要點擊做某事,然後在第一個2秒鐘再次點擊。「是的,那是當前的功能。不確定「不工作」是什麼意思?單擊「.fire」後,是否應清除'setTimeout',並將'html'設置爲'original'? – guest271314

+0

一旦它回來做一些警報不應該顯示在點擊..在做點擊,再次點擊應該顯示,如果你點擊前2秒,然後顯示警報..不是之前和之後.. – 120382833

5

你可以只使用一個if聲明單擊處理程序裏面看到無論是第一還是第二次點擊(通過檢查類),並執行相應的操作:

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();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="onlyfire"> 
 
Do Something 
 
</div>

注意:在事件處理程序中爲另一次單擊設置單擊處理程序並不總是那麼好的主意。

+0

請參閱http://stackoverflow.com/questions/39057179/why-is-click-event-attached-對類名燒,後類名,被移除的? – guest271314