2016-01-31 8 views
5

Mam modał bootstrap. Gdy użytkownik kliknie przycisk "Aktualizuj", wywołuje wywołanie ajax, aby zaktualizować DB. Jednak jeśli aktualizacja nie powiedzie się z jakiegoś powodu, chcę wyświetlić komunikat o błędzie i pozostawić otwarty mod.Zapobieganie modowi ładowania początkowego przed zamknięciem przy przycisku przesyłania Kliknij

Wszystko wydaje się działać w kolejności, w jakiej się spodziewam, jednak wydaje się, że e.preventDefault() nie zatrzymuje modala przed zamknięciem.

Dlaczego preventDefault() nie przerywa wysyłania przycisku?

Mój przycisk:

<button type="submit" class="btn btn-success" id="btnUpdate" style="margin-right:10px">Update</button> 

JavaScript kod kliknij przycisk.

$("#btnUpdate").on("click", function (e) { 
    // reset the message... 
    $("#errorMessage").html(""); 

    // get the value... 
    var myParam = $("#someSelection").attr("someData"); 
    var myParamData = JSON.parse(myParam); 

    updateData(myParamData.Name) 
    .done(function (result) { 
     if (!result.d == "") { 
      $("#errorMessage").html(result.d); 
      e.preventDefault(); 
     } 
     else {      
      loadData(); 
     } 
    }); 
}); 

Odpowiedz

4

Wystarczy zmienić rodzaj przycisku do button zapobiegnie złożyć:

<button type="button" class="btn btn-success" id="btnUpdate" style="margin-right:10px">Update</button> 

nadzieję, że to pomaga.


Aktualizacja:

Aby skorzystać z walidacji HTML5, gdy używasz submition AJAX można użyć checkValidity() metody.

Metoda HTMLSelectElement.checkValidity() sprawdza, czy element ma jakiekolwiek ograniczenia i czy je spełnia. Jeśli element nie spełnia swoich ograniczeń, przeglądarka wywołuje anulowane nieprawidłowe zdarzenie w elemencie, a następnie zwraca wartość false.

Tak Twój kod będzie:

$("#btnUpdate").on("click", function (e) { 
    // reset the message... 
    $("#errorMessage").html(""); 

    if($("form")[0].checkValidity()) { 
    // get the value... 
    var myParam = $("#someSelection").attr("someData"); 
    var myParamData = JSON.parse(myParam); 

    updateData(myParamData.Name) 
     .done(function (result) { 
     if (!result.d == "") { 
     $("#errorMessage").html(result.d); 
     e.preventDefault(); 
     } 
     else {      
     loadData(); 
     } 
    }); 
    }else{ 
    console.log("invalid form"); 
    } 
}); 
+0

To pomaga, ale powoduje problemy z moim klientem sid e sprawdzanie poprawności. Zmieniłem przycisk od przesłania na przycisk i dodałem trochę kodu, aby zamknąć modalny sukces i to jest w porządku ... Jednak w modalu mam 2 pola wejściowe, do których dodałem atrybut "wymagany". To teraz przestaje działać, ponieważ nie jest już przyciskiem przesyłania. Domyślam się, że mogę obsłużyć błąd sprawdzający po stronie serwera, ale ostatecznie miałem nadzieję, że zrobię sprawdzanie poprawności zarówno na kliencie, jak i na serwerze. – PrivateJoker

+0

Tak, możesz, sprawdź moją aktualizację. –

+0

Widzę, do czego zmierzasz, jednak nie działa dla mnie. Myślę, że mam wadę na stronie mojej strony. Mam

i żaden z moich modów bootstrap nie renderuje znacznika podczas sprawdzania html. – PrivateJoker

0

e.preventDefault() jest wywoływana z funkcji wywołania zwrotnego z updateData metodzie, jest całkiem możliwe, że zdarzenie zostanie zakończone przed zwrotna jest wywoływana.

Spróbuj umieścić e.preventDefault() przed wywołaniem metody updateData.

Nadzieja to pomaga

0

do 'Native' modalna, że ​​pochodzi z Bootstrap nie wydaje się być przyjazny dla javascript programista, patrz poniżej alternatywnej wtyczki:

BootstrapDialog.show({ 
 
    title: 'Ajax check', 
 
    message: 'Click buttons below', 
 
    buttons: [{ 
 
    label: 'Submit', 
 
    cssClass: 'btn-primary', 
 
    action: function(dialogRef) { 
 
     // Assuming here starts a new ajax request 
 
     $.when().done(function() { 
 
     var ok = false; 
 
     if(!ok) { 
 
      dialogRef.setMessage('<div class="alert alert-warning">Dude, something went wrong!</div>'); 
 
     } else { 
 
      alert('Great!'); 
 
     } 
 
     }); 
 
    } 
 
    }, { 
 
     label: 'Cancel', 
 
     action: function(dialogRef) { 
 
      dialogRef.close(); 
 
     } 
 
    }] 
 
});
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.9/css/bootstrap-dialog.css" rel="stylesheet" type="text/css" /> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.9/js/bootstrap-dialog.js"></script>

Przeczytaj więcej o wtyczce tutaj http://nakupanda.github.io/bootstrap3-dialog/

Powiązane problemy