2014-07-02 140 views
0

我有一系列表格式的鏈接,所有鏈接都使用不同的ID。我需要防止雙擊它們以防止關聯服務器代碼的雙重執行。但是用戶可以點擊不同的鏈接。我這樣說是因爲我遇到了以下解決方案:防止雙擊一個鏈接,但可以點擊另一個鏈接

$("a.button").one("click", function() { 
    $(this).click(function() { return false; }); 
}); 

我相信這停一下整個頁面,一旦一個鏈接被點擊它太強大了。我喜歡上面的類綁定方法,但用戶應該能夠單擊(單獨)任何鏈接。

想法感激。 謝謝。

編輯

目前正在努力:

<a class="dblclick" href=".... 

<script type="text/javascript"> 
    $("a.dblclick").dblclick(function (e) { return false; }); 
</script> 

但似乎並沒有工作。我正在使用Mozilla。

+1

你想讓每個鏈接只被點擊一次嗎? – Bharath

+0

「與不同ID連接」是什麼意思? – isherwood

+0

爲什麼在另一次點擊內有點擊? –

回答

1

這會在第一次點擊鏈接時向鏈接添加一個類。第二次,當課堂出現時,鏈接將不起作用。

$("a.button").on("click", function(event) { 
    event.preventDefault(); 

    if $(this).hasClass('clicked') { 
     return false; 
    } else { 
     $(this).addClass('clicked').trigger('click'); 
    } 
}); 
1

有點困惑,你正在嘗試做什麼。

您是否可以刪除處理它的函數上的click事件? 您可以從一個單獨的控制刪除事件與

$("#foo").unbind("click"); 

所以,你可以趕上一次點擊,然後取出處理器。

$("#foo").click(function(ev) { 
    ev.preventDefault(); 
    $("#foo").unbind("click"); 
}); 

preventDeafault()調用會阻止表單提交,只是在表單中這樣做。

1

嘗試設置標誌的元素

$("a.button").on("click", function() { 
    ev.preventDefault(); 
    if($(this).attr('data-clicked')){ 
     $(this).attr('data-clicked', true) 
     return true 
    } 
    return false 
}); 
+0

更好地使用有效屬性:'data-clicked'。 – isherwood

+0

suggeriment accepted :) – xecgr

+0

謝謝你。錨標籤看起來會使代碼起作用嗎? – SamJolly

1

嘗試使用雙擊(http://api.jquery.com/dblclick/

當你一個鏈接上雙擊,單擊事件將觸發,然後雙擊事件。您可以取消雙擊事件。

$("a.button").dblclick(function(e) { return false; }); 
+0

我試過這個,可悲的是我無法得到它的工作。我已經添加我的代碼到一個新的編輯在我的題。 – SamJolly

0

剛開始時只使用one

要澄清$("a.button").one(...)將註冊一個點擊恰好一次每個元素,這似乎是你想要的。

之後,我們只需要照顧可能再次設置clickhandler,當服務器完成處理。

//bootstrap 
$("a.button").one("click", clickhandlerOnce); 

function clickhandlerOnce(event) { 

    var $that = $(this), 
     url = "http://www.example.com"; 

    $.getJSON(url, function(result){ 
     //TODO: handle your result here. 
     //NOTE: take care of errors. 

     //since we're done now with the server processing, 
     //we may bind the handler again if needed. 
     $that.one("click", clickhandlerOnce); 
    }); 
};