2012-07-03 18 views
22

Mam formularz i chcę przechwycić przesłanie formularza, aby wyświetlić okno dialogowe z potwierdzeniem, używając bootbox.Potwierdź przesłanie formularza za pomocą pliku bootbox.confirm()

  1. Użytkownik wprowadzi pewne dane
  2. trafienia użytkownika przedłożyć
  3. dialogowe potwierdzenia jest pokazany

Jeśli użytkownik natrafi OK, wówczas forma powinna przedstawić, jeśli nie należy po prostu zatrzymać się na strona.

Próbowałem to:

$('#myForm').submit(function() { 
    return bootbox.confirm("Are you sure?"); 
}); 

Jednak bootbox.confirm() natychmiast powraca, z prośbą o potwierdzenie ponownie ukryte.

Zauważyłem, że istnieje parametr wywołania zwrotnego na bootbox.confirm(). Jednakże, jeśli mam zadzwonić pod numer $('#myForm').submit() z wywołania zwrotnego, to po prostu ponownie wyświetli się okno dialogowe potwierdzenia.

Jaki jest właściwy sposób potwierdzenia złożenia formularza?

+1

Btw, zmieniając przycisk Prześlij do zwykłego jednym i mocowania skrypt nie ma rozwiązania, ponieważ użytkownik nadal może uruchomić wysyłanie formularzy przez naciśnięcie klawisza Enter. – theDmi

Odpowiedz

37

Mam tylko tej pracy poprzez zapobieganie domyślne zachowanie formularza, oto rozwiązanie poniżej. Używam tego na liście formularzy, z których każdy zawiera przycisk przesyłania i działa poprawnie.

<script type="text/javascript"> 
    $('form').submit(function(e) { 
     var currentForm = this; 
     e.preventDefault(); 
     bootbox.confirm("Are you sure?", function(result) { 
      if (result) { 
       currentForm.submit(); 
      } 
     }); 
    }); 
</script> 
+3

Pracował dla mnie, bez użycia currentForm utknie w nieskończonej pętli, dzięki o pomoc! – trueinViso

+0

nie będzie to ponownie wyświetlać okno dialogowe z potwierdzeniem, ponieważ nazywasz 'submit' i nie masz sprawdzić wokół' bootbox'? –

11

Jak zwykle: Zaraz po zadaniu pytania samemu znajdziesz odpowiedź :-). Zobacz tę odpowiedź: https://stackoverflow.com/a/2420806/219187 (zwróć uwagę na komentarz w odpowiedzi).

adaptowany do mojego problemu, rozwiązanie wygląda następująco:

$('#myForm').submit(function() { 
    var currentForm = this; 
    bootbox.confirm("Are you sure?", function(result) { 
     if (result) { 
      currentForm.submit(); 
     } 
    }); 
}); 
+0

Wywołanie 'currentForm.submit();' nie powoduje wykonania kodu jQuery '$ ('# myForm'). Submit (function() {...' ?? – ScottC

+0

Nie, nie wydaje się. nie jestem zbyt dobrym specjalistą od JS, żeby ci powiedzieć, dlaczego :-). – theDmi

+3

$ ('# myForm'). Submit (funkcja (e) {e.preventDefault(); ... musiał dodać preventDefault – Rahul

1

ten kod działa idealnie dla mnie ...

<script type="text/javascript"> 
$('#myForm').click(function(e) { 
    e.preventDefault(); 
    var msg = 'Souhaitez vous vraiment supprimer ce produit ?'; 
    bootbox.confirm(msg, function(result) { 
     if (result) { 
      $('#myForm').submit(); 
     } 
    }); 
}); 
</script> 
0

Moje rozwiązanie

@Html.ActionLink("Delete", "DeleteReport", new { id = item.Id }, new { @class = "btn btn-danger", onclick = String.Format("return ASE.ConfirmAction(this.href, 'Delete {0}?');", item.Name) }) 
var ASE = { 
    ConfirmAction: function (href, text) { 
     bootbox.confirm(text, function (result) { 
      if (result) 
       window.location = href; 
     }); 

     return false; 
    } 
} 
+0

'window.location' wykonaj przekierowanie, a nie formularz przesłać. – Alex

Powiązane problemy