jQuery .get函数多次发送请求

时间:2013-08-14 15:44:42

标签: jquery click

我的脑区有以下代码:

<script>
$(function() {
    $("#idNameHere").click(function() {
        var title = $("#threadTitle").val();
        var category = $("#category").val();
        var message = CKEDITOR.instances['message'].getData();

        errors = new Array();
        if (title == "")
            errors.push("\n\t- You must enter a title.");
        if (category == "")
            errors.push("\n\t- You must select a category.");
        if (message == "")
            errors.push("\n\t- You must enter a message.");

        if (errors.length > 0)
        {
            var errorString = "Please fix the following errors and try again:";
            for (var i = 0; i < errors.length; i++)
                errorString = errorString + errors[i];

            alert(errorString);
        }
        else
        {
            $.get("./ajax/createThread.php", { title: title, category:category, message: message }, function(data) {
                if (!isNaN(data))
                    window.location='./viewThread.php?tid='+data;
                else
                    alert(data);
            });
        }
    });
});
</script>

有时(但并非总是)它多次发送请求 - 所以我最终将线程对象以多个方式插入到我的数据库中。

从我读过的内容来看,这是因为click函数在$(function(){})内; area - 但是,如果我从该区域中取出click功能,则不会捕获click事件,并且根本不会运行代码。

如何才能让点击功能注册,并且只运行一次?

2 个答案:

答案 0 :(得分:1)

如果您的意思是希望$ .get只发生一次,那么您需要在运行后禁用该按钮。

所以你必须添加这一行; $("#idNameHere").attr("disabled", "disabled")禁用该按钮。

然后这个$("#idNameHere").removeAttr("disabled");启用它,以防出现错误

凯文B; PS: 或者最好.prop(“disabled”,true) 和.prop(“禁用”,false)  我猜这是适用于较旧的浏览器版本和IE

像这样;

 $("#idNameHere").click(function() {
        $("#idNameHere").attr("disabled", "disabled");
        var title = $("#threadTitle").val();
        var category = $("#category").val();
        var message = CKEDITOR.instances['message'].getData();

        errors = new Array();
        if (title == "")
            errors.push("\n\t- You must enter a title.");
        if (category == "")
            errors.push("\n\t- You must select a category.");
        if (message == "")
            errors.push("\n\t- You must enter a message.");

        if (errors.length > 0)
        {
            var errorString = "Please fix the following errors and try again:";
                for (var i = 0; i < errors.length; i++)
                    errorString = errorString + errors[i];

            alert(errorString);

            //re-enable the button
            $("#idNameHere").removeAttr("disabled");
        }
        else
        {
            $.get("./ajax/createThread.php", { title: title, category:category, message: message }, function(data) {
                if (!isNaN(data)){
                    window.location='./viewThread.php?tid='+data;
                }else{
                    alert(data);
                }
            });
        }
    });

答案 1 :(得分:0)

我经常创建一个全局变量并将其设置为true。你将它作为条件的一部分并在运行函数后将其设置为flase,然后让函数在获取数据后将全局变量返回true(如果你想再次运行该函数)。