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() {}); 内にあるためです。エリア - ただし、そのエリアからクリック機能を取り出すと、クリック イベントがキャッチされず、コードがまったく実行されません。

クリック機能を登録して一度だけ実行するにはどうすればよいですか?

4

2 に答える 2

1

$.get を 1 回だけ実行したい場合は、実行後にボタンを無効にする必要があります。

したがって、この行を追加する必要があります。$("#idNameHere").attr("disabled", "disabled")ボタンを無効にします。

$("#idNameHere").removeAttr("disabled");エラーが発生した場合に備えて、これを有効にします

ケビン・B; 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 に答える