0

我的头部区域有以下代码:

<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>

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

根据我的阅读,这是因为点击功能在 $(function() {}); area - 但是,如果我将 click 函数移出该区域,则不会捕获 click 事件,并且根本不会运行代码。

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

4

2 回答 2

1

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

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

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

凯文乙;PS: 或者最好是 .prop("disabled",true) 和 .prop("disabled", 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);
                }
            });
        }
    });
于 2013-08-14T15:53:06.783 回答
0

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

于 2013-08-14T15:54:37.697 回答