2013-01-18 33 views
8

Tôi đang cố gắng sử dụng alertify.js làm hộp thoại xác nhận cho tất cả các tập lệnh xác nhận của mình. Nhưng nó không hoạt động như JS confirm thông thường. Trong đoạn mã dưới đây tôi không bao giờ có được một return trueJavascript Thông báo với sự trở về từ xác nhận

function aConf (mes) { 
    alertify.confirm(mes, function (e) { 
     return e; 
    }); 
} 

<a href="#" onclick="if(aConf(\'Are you sure you wish to remove this?\')) { function(); } return false;">Delete</a> 

Tất nhiên nếu tôi thay aConf với JS' confirm nó hoạt động. Vậy tại sao alertify không gửi lại cho tôi kết quả?

Trả lời

9

Bởi vì xác nhận là một chức năng chặn (không có javascript sẽ chạy cho đến khi nó trả về true/false) và cảnh báo là không chặn (JS tiếp tục thực hiện). Alertify không ngay lập tức trả về true/false, nhưng thay vào đó, nó có thể trả về undefined ngay lập tức, sau đó nó gọi một hàm gọi lại sau, sau khi người dùng nhấn OK hoặc Cancel. Giá trị trả về từ hàm gọi lại đó không có hiệu lực trong ví dụ của bạn, bởi vì mã onclick đã chạy xong (vì nó không bị chặn).

Giả sử bạn đang sử dụng này: https://github.com/fabien-d/alertify.js/

Đây là cách nó thực sự hoạt động với một chức năng gọi lại, không phải là một giá trị trả về:

alertify.confirm(message, function (e) { 
    if (e) { 
     //after clicking OK 
    } else { 
     //after clicking Cancel 
    } 
}); 

Đối với mẫu mã của bạn, bạn có thể thử một cái gì đó như thế này:

function performDelete (a_element) { 
    // perform your delete here 
    // a_element is the <a> tag that was clicked 
} 

function confirmAction (a_element, message, action) { 
    alertify.confirm(message, function(e) { 
     if (e) { 
      // a_element is the <a> tag that was clicked 
      if (action) { 
       action(a_element); 
      } 
     } 
    }); 
} 

<a href="#" onclick="confirmAction(this, 'Are you sure you wish to remove this?', performDelete); return false;">Delete</a> 

EDIT: được cập nhật thành hộp thoại xác nhận chung gọi hàm gọi lại nếu người dùng nhấp vào ok.

+0

Đó là sự cố. Tôi không muốn tạo ra một chức năng mới cho mỗi lần tôi gọi nó. Tôi muốn có một chức năng chung để hiển thị và trả lại. Cảm ơn. – jfreak53

+0

Ý của bạn là bạn muốn liên kết điều hướng đến href nếu người dùng nhấp OK? hoặc là có một số javascript thực hiện hành động nếu người dùng nhấn OK? Xem câu trả lời cập nhật của tôi. – Levi

+0

Không, nhưng những gì bạn đăng ở trên tôi có thể tinh chỉnh ngay bây giờ để làm những gì tôi cần :) cảm ơn. – jfreak53

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