防止双击链接但可以单击另一个链接

时间:2014-07-02 16:41:22

标签: javascript jquery

我有一系列表格格式的链接,所有链接都使用不同的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。

5 个答案:

答案 0 :(得分:4)

这会在第一次点击时为链接添加一个类。第二次,当班级出现时,链接将无法运作。

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

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

答案 1 :(得分:1)

对于你想要做什么感到困惑。

您是否可以删除处理它的函数上的click事件? 您可以使用

从单个控件中删除事件
$( "#foo").unbind( "click" );

因此,您可以捕获初始点击,然后删除处理程序。

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

preventDeafault()调用会阻止您的表单提交,只是在表单中执行此操作。

答案 2 :(得分:1)

尝试在元素中设置标志

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

答案 3 :(得分:1)

尝试使用双击(http://api.jquery.com/dblclick/

双击链接时,将触发click事件,然后触发双击事件。您可以取消双击事件。

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

答案 4 :(得分:1)

在开始时使用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);
    });
};