2010-12-31 35 views
13

Tôi đang cố gắng xây dựng một cơ chế cảnh báo đơn giản với Công cụ jQuery - để phản hồi một chút mã Javascript, bật lên một lớp phủ với một thông báo và nút OK, khi được nhấp, làm cho lớp phủ biến mất. Tầm thường, hoặc nó phải được. Tôi đã được slavishly sau http://flowplayer.org/tools/demos/overlay/trigger.html, và có cái gì đó hoạt động tốt lần đầu tiên nó được gọi, nhưng chỉ có thời gian đó. Nếu tôi lặp lại hành động JS mà nên phơi bày lớp phủ, nó không.Cảnh báo Công cụ jQuery hoạt động một lần (nhưng chỉ một lần)

Nội dung cá nhân/DIV:

<div class='modal' id='the_alert'> 
    <div id='modal_content' class='modal_content'> 
    <h2>hi there</h2> 
    this is the body 
    <p> 
    <button class='close'>OK</button> 
    </p> 
    </div> 
    <div id='modal_background' class='modal_background'><img src='/images/overlay/f9f9f9-180.png' class='stretch' alt='' /></div> 
</div> 

và javascript:

function showOverlayDialog() { 
$('#the_alert').overlay({ 
    mask: {color: '#cccccc', loadSpeed: 200, opacity: 0.9}, 
    closeOnClick: false, 
    load: true 
}); 
} 

Như tôi đã nói: Khi showOverlayDialog() được gọi lần đầu tiên, lớp phủ xuất hiện giống như nó nên, và biến mất khi nhấn nút "OK". Nhưng nếu tôi gây showOverlayDialog() để chạy lại, mà không cần tải lại trang, không có gì xảy ra. Nếu tôi tải lại trang, thì mẫu lặp lại - lời gọi đầu tiên sẽ hiển thị lớp phủ, nhưng lớp thứ hai thì không.

Tôi rõ ràng đang thiếu thứ gì đó - bất kỳ lời khuyên nào ngoài đó? Cảm ơn!

+0

Bạn đang gắn gì vào nút 'Đóng'? Trong nháy mắt, có vẻ như bạn có thể thao tác HTML để che giấu lớp phủ thay vì sử dụng JQuery - do đó JQuery cho rằng lớp phủ đã được mở và sẽ không hiển thị lại. Đây có thể là phân tích không chính xác nhưng nếu bạn có thể đăng toàn bộ nguồn, chúng tôi có thể giúp thêm – Basic

+0

Tôi không đính kèm bất kỳ thứ gì vào nút Đóng. Sự hiểu biết của tôi (giới hạn) của jQuery Tools là việc gán nút OK cho class = close làm cho một cái gì đó tự động xảy ra trong mã jQuery Tools, khiến cho lớp phủ biến mất. Trong mọi trường hợp, tôi không có bất kỳ trình xử lý jQuery hoặc javascript nào khác xung quanh làm việc với cấu trúc. –

Trả lời

20

Xác định hộp thoại và thiết lập load false (vô hiệu hóa tính năng tự động tải của hộp thoại):

$('#the_alert').overlay({ 
    mask: { 
     color: '#cccccc', 
     loadSpeed: 200, 
     opacity: 0.9 
    }, 
    closeOnClick: false, 
    load: false 
}); 

Sau đó, trong xử lý của bạn cho thấy hộp thoại, hãy gọi loadapi method:

$("#show").click(function() { 
    $("#the_alert").data("overlay").load(); 
}); 

(Chỉ định một sự kiện nhấp chuột cho một phần tử có id là show hiển thị lớp phủ)

Làm việc exa mple here: http://jsfiddle.net/andrewwhitaker/Vqqe6/

Tôi không tin rằng bạn có thể xác định nhiều lớp phủ trên một yếu tố cụ thể gây ra sự cố của bạn.

+0

OK - cảm ơn nhiều! Tôi đã phải tinh chỉnh nó một chút để làm cho nó phù hợp với những gì thực sự xảy ra với trang, nhưng tất cả đều tốt. Âm thanh như một câu trả lời cho tôi; cảm ơn! –

+1

Gần 1 năm sau và câu trả lời này vẫn hữu ích cho ai đó. Cảm ơn, @Andrew. +1 – rgin

+0

Tôi phải đặt đúng cho tải –

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