Tôi đang sử dụng plugin này cho các menu fly-out: http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/jQuery vị trí của nguyên tố sau html() gọi
Nút là bên trong một div như thế:
<div class="stuff">
some stuff
<a class="quickfire">menu</a>
</div>
tôi áp dụng nó cho một số liên kết như vậy:
jQuery('.quickfire').menu({
content: jQuery('#search-engines').html(), // grab content from this page
showSpeed: 400
});
Where .quickfire là tên lớp của liên kết. Cho đến nay rất tốt, công trình.
Tuy nhiên người dùng cũng có thể kích hoạt cuộc gọi AJAX, sẽ tìm nạp một chuỗi HTML từ máy chủ và thay thế div "stuff" bằng nội dung mới (chính nó sẽ chứa liên kết nhanh).
jQuery.ajax({
url: 'ajax_file.php',
data: {
action: 'create_option_new_version',
id: jQuery('#qid').val(),
div: jQuery("#addMoreOptions").parent().parent().attr('id'),
cleanOutput: true
},
success: function(data, textStatus, jqXHR){
jQuery(".stuff").html(data);
}
});
Như dự kiến, liên kết nhanh sẽ không còn được đính kèm vào Menu jQuery nữa. Vì vậy, tôi liên kết lại mỗi lần:
jQuery.ajax({
url: 'ajax_file.php',
data: {
action: 'create_option_new_version',
id: jQuery('#qid').val(),
div: jQuery("#addMoreOptions").parent().parent().attr('id'),
cleanOutput: true
},
success: function(data, textStatus, jqXHR){
jQuery(".stuff").html(data);
var position = jQuery('.quickfire').position();
console.log("left: " + position.left + " top: " + position.top);
jQuery('.quickfire').menu({
content: jQuery('#search-engines').html(), // grab content from this page
showSpeed: 400
});
}
});
Hầu như ở đó!
Vấn đề là, khi tôi nhấp vào nút quickfire mới tạo, nó hoạt động, nhưng menu xuất hiện ở góc trên bên trái của màn hình của tôi, thay vì bên cạnh nút!
Tôi đã cố gắng in "vị trí" của nút quickfire. Đối với một tải ban đầu, nó nói 361 x 527. Đối với những người tiếp theo, tất cả họ đều nói 0 x 320
Đây là mã thực:
jQuery("#addMoreOptions").live('click',function(){
jQuery(".lastPollOptionInput").removeClass("lastPollOptionInput");
jQuery.ajax({
url: 'ajax_file.php',
data: {
action: 'create_option_new_version',
id: jQuery('#qid').val(),
div: jQuery("#addMoreOptions").parent().parent().attr('id'),
cleanOutput: true
},
success: function(data, textStatus, jqXHR){
jQuery("#addMoreOptions").parent().parent().html(data);
jQuery('.quickfire').fgmenu({
content: jQuery('#search-engines').html(), // grab content from this page
showSpeed: 400
});
}
});
});
Tôi đã cố gắng "tháo" nút quickfire ngay trước khi thay thế nội dung, sau đó chèn lại. Bây giờ nó không đặt menu ở phía trên bên trái, thay vào đó nó đặt trình đơn chính xác nơi nó đã được trước khi tôi đã thực hiện cuộc gọi ajax (mà tôi đoán có ý nghĩa). Không chính xác vị trí chính xác, nhưng ít nhất là gần hơn rất nhiều về mặt địa lý –
Bạn có thể liên kết đến trang nơi bạn đang gặp sự cố này không? Một thử nghiệm thô sơ trên jsfiddle (http://jsfiddle.net/6VrgD/3/) gợi ý rằng có thể có điều gì đó không đúng ở nơi khác trong mã của bạn ... – Chris
Thật không may, nó sống trên máy tính của tôi và khách hàng không muốn tôi chia sẻ nhiều. Nhưng tôi đã thêm một số mã. –