Bạn không thể. Chỉ những người xây dựng đặc biệt mới có thể làm được điều đó. Trong một thời gian, có showModalDialog
được xây dựng đặc biệt cho phép bạn chỉ định URI cho nội dung và do đó tùy chỉnh nó, nhưng nó chưa bao giờ được hỗ trợ rộng rãi và hiện không được chấp nhận ngay cả bởi các trình duyệt đã từng hỗ trợ nó.
Thay vào đó, hãy thực hiện chức năng cảnh báo hiện tại sử dụng div
chấp nhận gọi lại khi cảnh báo được đóng (hoặc trả lại lời hứa được giải quyết khi đóng) để cho phép bạn tiếp tục xử lý.
Vì vậy, ví dụ, nếu mã của bạn sử dụng để sử dụng alert
và làm việc như thế này:
function foo() {
var x;
x = doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
}
... bạn muốn thay đổi nó thành:
function foo() {
var x;
x = doSomething();
fakeAlert("Alert! Alert!", function() {
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
});
}
Lưu ý rằng bây giờ tất cả các mã mà theo sau cảnh báo là trong một chức năng, có tham chiếu chúng tôi vượt qua vào fakeAlert
. Hàm foo
trả về trong khi cảnh báo giả vẫn hiển thị, nhưng cuối cùng người dùng loại bỏ cảnh báo giả và gọi lại của chúng tôi được gọi. Lưu ý rằng mã gọi lại của chúng tôi có quyền truy cập vào người dân địa phương trong cuộc gọi tới số foo
mà chúng tôi đã xử lý, vì cuộc gọi lại của chúng tôi bị đóng (đừng lo lắng nếu đó là cụm từ khá mới và/hoặc bí ẩn, closures are not complicated).
Tất nhiên, nếu điều duy nhất sau cảnh báo là một cuộc gọi hàm duy nhất không nhận bất kỳ đối số nào, chúng tôi chỉ có thể chuyển trực tiếp tham chiếu hàm đó. Ví dụ này:
function foo() {
doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared();
}
trở thành:
function foo() {
doSomething();
fakeAlert("Alert! Alert!", doSomethingAfterTheAlertIsCleared);
}
(Lưu ý rằng không có ()
sau doSomethingAfterTheAlertIsCleared
- chúng tôi đề cập đến đối tượng chức năng, không gọi hàm; fakeAlert
sẽ gọi nó.)
Trong trường hợp bạn không chắc chắn cách fakeAlert
sẽ gọi hàm gọi lại, nó sẽ nằm trong trình xử lý sự kiện cho người dùng "đóng" div cảnh báo và bạn t gọi đối số cho cuộc gọi lại giống như bạn thực hiện với bất kỳ tham chiếu nào khác đến hàm. Vì vậy, nếu fakeAlert
nhận nó là callback
, bạn gọi nó bằng cách nói callback();
.
Có thể với Promise API. – codef0rmer
chỉ là những gì tôi tìm kiếm, đôi khi bạn cần phải ngăn chặn nó hoàn toàn. tôi hy vọng tôi không sử dụng trong khi vòng lặp: D i có nghĩa là ngăn chặn quá trình mà không sử dụng bất kỳ mã tiêu thụ tài nguyên ... – deadManN
@Vixed: Có gì cũ về câu trả lời hiện tại? Rằng họ không đề cập đến lời hứa? Hoặc sắp tới đang chờ đợi/async (ngữ nghĩa trong đó vẫn không đóng đinh)? –