html()调用后元素的jQuery位置

Nat*_*n H 7 jquery events dom jquery-ui

我正在使用这个插件用于飞出菜单:http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/

按钮位于div内部:

<div class="stuff">
some stuff
<a class="quickfire">menu</a>
</div>
Run Code Online (Sandbox Code Playgroud)

我正在将它应用于某些链接,如下所示:

jQuery('.quickfire').menu({ 
        content: jQuery('#search-engines').html(), // grab content from this page
        showSpeed: 400 
    });
Run Code Online (Sandbox Code Playgroud)

其中.quickfire是链接的类名.到目前为止这么好,有效.

然而,用户还可以触发AJAX调用,该调用将从服务器获取一堆HTML并用新内容替换div"stuff"(其本身将包含quickfire链接).

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);


            }
        });
Run Code Online (Sandbox Code Playgroud)

正如所料,quickfire链接不再附加到jQuery菜单.所以,我每次都会再次链接它:

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
                });


            }
        });
Run Code Online (Sandbox Code Playgroud)

差不多了!

问题是,当我点击新创建的快速启动按钮时,它可以工作,但菜单出现在我的屏幕的左上角,而不是按钮旁边!

我试图打印出快速按钮的"位置".对于初始加载一,它表示361 x 527.对于后续的加载,它们都说0 x 320

这是真正的代码:

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
                });


            }
        });


    });
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 0

难道你正在使用fgmenu()而不是仅仅menu()?(更新:您说您自己将函数从 menu 重命名为 fgmenu,所以它可能$.fn.menu在内部调用 - 换句话说,冲突的 jQuery UI 函数......)

检查控制台是否有错误,以防万一其中有任何明显的错误。

我的下一个猜测是,这jQuery("#addMoreOptions").parent().parent()可能不是您期望的元素,实际上可能是该<html>元素或其他类似的意外节点。

另一件事是,因为您正在调用$(something).parent().html("blah")意味着您正在替换该$(something)节点,该节点在后续调用中可能不存在。

如果有更好的方法来定位并保留对预期节点的引用,我建议您这样做。