Arrêter le formulaire de soumission, en utilisant Jquery

J'essaie d'empêcher mon formulaire de soumettre si une validation échoue. J'ai essayé de suivre ce post précédent mais je ne travaille pas pour moi. Ce qui me manque?

<input id="saveButton" type="submit" value="Save" />
<input id="cancelButton" type="button" value="Cancel" />
<script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function () {
        $("form").submit(function (e) {
            $.ajax({
                url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
                data: { id: '@Model.ClientId' },
                success: function (data) {
                    showMsg(data, e);
                },
                cache: false
            });
        });
    });
    $("#cancelButton").click(function () {
        window.location = '@Url.Action("list", "default", new { clientId = Model.ClientId })';
    });
    $("[type=text]").focus(function () {
        $(this).select();
    });
    function showMsg(hasCurrentJob, sender) {
        if (hasCurrentJob == "True") {
            alert("The current clients has a job in progress. No changes can be saved until current job completes");
            if (sender != null) {
                sender.preventDefault();
            }
            return false;
        }
    }

</script>
53
demandé sur Community 2012-04-10 20:22:38

5 réponses

Encore une fois, AJAX est asynchrone. Ainsi, la fonction showMsg ne sera appelée qu'après une réponse réussie du serveur.. et l'événement de soumission de formulaire n'attendra pas le succès D'AJAX.

Déplacer le e.preventDefault(); comme première ligne dans le gestionnaire de clic.

$("form").submit(function (e) {
      e.preventDefault(); // this will prevent from submitting the form.
      ...

Voir code ci-dessous,

Je veux qu'il soit autorisé HasJobInProgress = = False

$(document).ready(function () {
    $("form").submit(function (e) {
        e.preventDefault(); //prevent default form submit
        $.ajax({
            url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
            data: { id: '@Model.ClientId' },
            success: function (data) {
                showMsg(data);
            },
            cache: false
        });
    });
});
$("#cancelButton").click(function () {
    window.location = '@Url.Action("list", "default", new { clientId = Model.ClientId })';
});
$("[type=text]").focus(function () {
    $(this).select();
});
function showMsg(hasCurrentJob) {
    if (hasCurrentJob == "True") {
        alert("The current clients has a job in progress. No changes can be saved until current job completes");
        return false;
    } else {
       $("form").unbind('submit').submit();
    }
}
102
répondu Selvakumar Arumugam 2012-04-10 16:37:03

Utilisez ceci aussi:

if(e.preventDefault) 
   e.preventDefault(); 
else 
   e.returnValue = false;

Becoz E. preventDefault () n'est pas pris en charge dans IE( certaines versions ). Dans IE c'est E. returnValue = false

15
répondu Arjun Raj 2016-11-28 15:01:31

Essayez le code ci-dessous. E. preventDefault () a été ajouté . Cela supprime l'action d'événement par défaut pour le formulaire.

 $(document).ready(function () {
    $("form").submit(function (e) {
       $.ajax({
            url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
            data: { id: '@Model.ClientId' },
            success: function (data) {
                showMsg(data, e);
            },
            cache: false
        });
        e.preventDefault();
    });
});

En outre, vous avez mentionné que vous vouliez que le formulaire ne soit pas soumis sous la prémisse de la validation, mais je ne vois pas de validation de code ici?

Voici un exemple de validation supplémentaire

 $(document).ready(function () {
    $("form").submit(function (e) {
      /* put your form field(s) you want to validate here, this checks if your input field of choice is blank */
    if(!$('#inputID').val()){ 
       e.preventDefault(); // This will prevent the form submission
     } else{
        // In the event all validations pass. THEN process AJAX request.
       $.ajax({
            url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
            data: { id: '@Model.ClientId' },
            success: function (data) {
                showMsg(data, e);
            },
            cache: false
       });
     }


    });
 });
3
répondu Downpour046 2012-04-10 16:35:45

Une approche différente pourrait être

    <script type="text/javascript">
    function CheckData() {
    //you may want to check something here and based on that wanna return true and false from the         function.
    if(MyStuffIsokay)
     return true;//will cause form to postback to server.
    else
      return false;//will cause form Not to postback to server
    }
    </script>
    @using (Html.BeginForm("SaveEmployee", "Employees", FormMethod.Post, new { id = "EmployeeDetailsForm" }))
    {
    .........
    .........
    .........
    .........
    <input type="submit" value= "Save Employee" onclick="return CheckData();"/>
    }
3
répondu Sandeep 2014-08-15 18:07:36

C'est un code JQuery pour empêcher Submit

$('form').submit(function (e) {
            if (radioButtonValue !== "0") {
                e.preventDefault();
            }
        });
2
répondu keivan kashani 2018-07-05 10:29:51