2012-07-03 21 views
22

Tôi có biểu mẫu và muốn chặn gửi biểu mẫu để hiển thị hộp thoại xác nhận bằng cách sử dụng bootbox.Xác nhận việc gửi biểu mẫu bằng cách sử dụng bootbox.confirm()

  1. dùng nhập vào một số dữ liệu
  2. hits tài khoản nộp
  3. Một hộp thoại xác nhận được hiển thị

Nếu người dùng chạm OK, sau đó các hình thức phải nộp, nếu không muốn nói nó chỉ nên ở trên trang.

Tôi cố gắng này:

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

Tuy nhiên, bootbox.confirm() ngay lập tức trở lại, hộp thoại xác nhận đang ẩn nữa.

Sau đó, tôi nhận thấy rằng có thông số gọi lại trên bootbox.confirm(). Tuy nhiên, nếu tôi gọi $('#myForm').submit() từ cuộc gọi lại, điều này rõ ràng sẽ chỉ hiển thị lại hộp thoại xác nhận.

Vì vậy, cách thích hợp để xác nhận việc gửi biểu mẫu là gì?

+1

Btw, thay đổi nút gửi để là một bình thường và gắn kịch bản không có giải pháp, bởi vì người dùng vẫn có thể kích hoạt gửi biểu mẫu bằng cách nhấn enter. – theDmi

Trả lời

37

Tôi chỉ có làm việc này bằng cách ngăn chặn các hành vi hình thức mặc định, đây là giải pháp dưới đây. Tôi đang sử dụng tính năng này trong danh sách biểu mẫu, mỗi biểu mẫu có nút gửi xóa và hoạt động tốt.

<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

Làm việc cho tôi, mà không dùng currentForm nó bị kẹt trong vòng lặp vô hạn, cảm ơn để được trợ giúp! – trueinViso

+0

sẽ không hiển thị lại hộp thoại xác nhận, vì bạn đang gọi 'submit' và không có kiểm tra xung quanh' bootbox'? –

11

Như mọi khi: Ngay sau khi bạn đặt câu hỏi, bạn tự tìm câu trả lời :-). Xem câu trả lời này: https://stackoverflow.com/a/2420806/219187 (cũng lưu ý nhận xét trong câu trả lời).

Thích nghi với vấn đề của tôi, giải pháp trông như sau:

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

để gọi 'currentForm.submit();' không thực thi mã jQuery '$ ('# myForm'). Submit (function() {...'? – ScottC

+0

Không, dường như không. Nhưng tôi 'không đủ của một chuyên gia JS để cho bạn biết lý do tại sao :-). – theDmi

+3

$ ('# myForm'). Submit (function (e) {e.preventDefault(); ... phải thêm defaultDefault – Rahul

1

Mã này hoạt động hoàn hảo đối với tôi ...

<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

Giải pháp của tôi

@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' thực hiện chuyển hướng chứ không phải gửi biểu mẫu. – Alex

Các vấn đề liên quan