0

以下に、送信ボタンと、送信ボタンがクリックされたときに実行されるjquery関数があります。

<p><input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" onClick="return myClickHandler();" /></p>

<script type="text/javascript"> 
function myClickHandler()
{
     if (validation())
     {
         showConfirm();
         return true;
     }

     return false;
}
</script>

validation() 関数が満たされているかどうかがわかるように、showConfirm() 関数が実行され、この関数は以下の確認ボックスを実行します。

function showConfirm()
{
    var confirmMsg=confirm("Make sure that your details are correct, once you proceed after this stage you would not be able to go back and change any details towards Questions, Options and Answers for your Assessment." + "\n" + "\n" + "Are you sure you want to Proceed?" + "\n" );

    if (confirmMsg == true)
    {
        submitform(); 
        return true;  
    }
    else
    {
        return false;
    }
}

function submitform()
{
    var fieldvalue = $("#QandA").val();
    $.post("insertQuestion.php", $("#QandA").serialize(), function(data)
    {
        var QandAO = document.getElementById("QandA");
        QandAO.submit();
    });  
    alert("Your Details for this Assessment has been submitted"); 
}

私の質問はこれです。ユーザーが確認ボックスで [OK] をクリックすると、問題のないページが送信されます。ただし、ユーザーが [キャンセル] をクリックした場合、ページは送信されません。問題は、[キャンセル] ボタンをクリックしたにもかかわらず、ページを送信していることです。どうしてこれなの?

アップデート:

以下のコードを試しましたが、まだうまくいきません:

function myClickHandler()
{
     if(validation())
     {
         return showConfirm();
     }

     return false;
}
4

1 に答える 1

6
if(validation()){
    showConfirm();
    return true;
}

からの戻り値では何もしませんshowConfirm();return trueその機能が完了した直後。試してみてくださいreturn showConfirm();


ユーザーが関数で [キャンセル] をクリックすると、関数showConfirm()は実行されずsubmitform()showConfirm()関数は false を返します。ただし、その戻り値をキャプチャしないため、myClickHandler()関数は true を返しますが、フォームの送信は妨げられません。

myClickHandler()おそらく、関数が常に false を返し、フォームの送信が関数によって処理されるようにしたいだけでしょうshowConfirm()


更新: これは(IMO)より良い方法です。$.postAJAX (呼び出し)を使用する必要があるかどうかはわかりません。これを試して:

<form id="QandA" action="somepage.php" method="POST" onsubmit="return myClickHandler()">
    <!--
        ...
    -->
    <input type="submit" id="submitBtn" name="submitDetails" value="Submit Details" />
</form>

<script type="text/javascript">
    function myClickHandler()
    {
        if (!validation())
            return false;

        if (!confirm("Make sure that your details are correct, once you proceed after this stage you would not be able to go back and change any details towards Questions, Options and Answers for your Assessment." + "\n" + "\n" + "Are you sure you want to Proceed?" + "\n" ))
            return false;

        // if all you're trying to do is submit the form to insertQuestion.php,
        // then skip this AJAX call. I'm assuming that you need to do something
        // on the server before submitting the form. if not, skip this.
        $.ajax({
            url: "insertQuestion.php",
            data: $("#QandA").serialize(),
            async: false
        });

        return true;
    }
</script>
于 2012-09-17T16:42:15.823 に答える