面临单击和双击 JQuery 的问题

Facing issue with on click and double click JQuery

提问人:Amir 提问时间:1/21/2021 更新时间:1/21/2021 访问量:62

问:

我正在使用单击ajax调用从文件中获取html以附加到div,然后单击以按类删除它。单击插入和删除工作正常,但是当错误地双击或双击时,html 会重复。也把它添加到jsfiddle

这是我的jQuery代码。

$('.srcbx').on('click',function(){
    if($('.srcbx').hasClass('opened')){
        $("form.search").slideUp(1500,function(){$(this).remove();});
        $(".srcbx").removeClass("opened");
    }
    else
    {
        $.ajax({
            type:"GET",
            url:"<?php echo BASE_URL; ?>/load.php",
            data:{action:'search-html'},
            success:function(data){
                $(data).appendTo("header .container").slideDown(1500,function(){$(this).show();});
                $("#search").keyup(function(){
                if($(this).val() != '' && $(this).val().length >= 3){
                    $.ajax({
                        type:"POST",
                        url:"<?php echo BASE_URL; ?>/load.php",
                        data:{action:'search',keyword:$(this).val()},
                        beforeSend:function(){
                            $("form.search").prepend("<div class='loader'></div>");
                        },
                        success: function(data){
                            $("#suggesstion").show();
                            $("#suggesstion").html(data);
                            $("form.search .loader").remove();
                        }
                    });
                }
                else
                {
                    $("#suggesstion").hide();
                }
                });
                $("#search-btn").click(function(){
                    var v = $("#search").val(); 
                    window.location.href="<?php echo BASE_URL; ?>/?s="+v;
                    return false;
                });
            }
        });
        $('.srcbx').addClass('opened');
    }
});
JavaScript jQuery

评论

0赞 freedomn-m 1/21/2021
可能有一种花哨的方法,但您可以使用代替,这样它只发生一次,或者您可以禁用该按钮直到 ajax 完成,或者只有一个标志,例如您清除的标志.one().onif(running===true) return; running=true;$.ajax().always()
0赞 Amir 1/21/2021
谢谢你的帮助。我正在使用单击进行添加和删除,所以 ''' .one() ''' 不适合这个,对吧?如何禁用或添加标志?你可以在这里添加吗?jsfiddle.net/amiralamkhan/b9omyx1g/10
0赞 freedomn-m 1/21/2021
如果你想使用 .one() (在这种情况下,如果没有额外的样式,它不是很好的 UX,但可以解决你的问题)并能够再次单击它,那么你需要在.always()
0赞 Amir 1/21/2021
我不喜欢 .one() 你能给我看禁用按钮或添加标志的代码吗?在我的 JSFIDDLE 上?
0赞 freedomn-m 1/21/2021
仔细查看您的代码,您基本上已经添加了 with .所以我不太确定你的问题在你的代码中在哪里。我已经(也许错误地)做出了一些假设,例如假设“双击”意味着“单击两次”(这略有不同)——但您的意思是 #search 中的多个键控吗?你包含了一些代码是很好的,但也许你可以将你的代码减少到只有相关的部分,并删除任何不相关的部分。flag$('.srcbx').addClass('opened');

答:

1赞 Amir 1/21/2021 #1

固定。。 我只是添加了这样的多个标志,它工作正常,忽略了双击。

if(!$('.srcbx').hasClass('opened') && !$('form').hasClass('search')){}