Javascript 如何阻止用户多次加载函数jquery

Javascript 如何阻止用户多次加载函数jquery,javascript,jquery,Javascript,Jquery,我有一个功能,它可以在按下enter键或submit按钮时工作…我正在使用这个 $('#searchBtn').click(function(){ var str = $('#searchTxt').val(); $.get(searchStr+"&text=" + str, function(data){ fetchPhoto(data); }, "json"); }); $('#searchTxt').keydown(function

我有一个功能,它可以在按下enter键或submit按钮时工作…我正在使用这个

    $('#searchBtn').click(function(){
    var str = $('#searchTxt').val();
    $.get(searchStr+"&text=" + str, function(data){
        fetchPhoto(data);
    }, "json");
});

$('#searchTxt').keydown(function(event){
    if (event.which == 13)
        var str = $('#searchTxt').val();
        $.get(searchStr+"&text=" + str, function(data){
        fetchPhoto(data);
    }, "json");
});
fetchPhoto是一个相当长的过程,因为它会访问一些外部库,如果有人让它多次关闭,它会给出一些奇怪的结果(多个结果)


如何防止这种情况发生?某种程度上需要一个计时器或一个锁或其他东西…

您可以禁用按钮,直到您的进程完成,然后启用它

您可以添加一个标志来防止多次触发
.get()

试试这个:

var ok_to_click = true; // this var will prevent the $.get() to be fired when its value is false
$('#searchBtn').click(function () {
    var str = $('#searchTxt').val();
    if (ok_to_click) {
        $.get(searchStr + "&text=" + str, function (data) {
            fetchPhoto(data);
            ok_to_click = true;
        }, "json");
        ok_to_click = false;
    }

});

$('#searchTxt').keydown(function (event) {
    if (event.which == 13) var str = $('#searchTxt').val();
    if (ok_to_click) {
        $.get(searchStr + "&text=" + str, function (data) {
            fetchPhoto(data);
            ok_to_click = true;
        }, "json");
        ok_to_click = false;
    }
});

这些是异步方法。如果要使它们同步,请尝试使用
.when()
.then()
包装方法。查看
setTimeOut
one()
。可以选择全局标志(Sergio的答案),也可以使用.on()和.off()为了处理你的事件。我建议在你的情况下添加超时键,以避免你的服务器和客户端“疯狂”,比如@ BrAM写的,也考虑用CSS禁用按钮(U杀死一个石头一个U的U显示用户正在发生的事情,你不需要担心多堆点击)。