【问题标题】:Detach and Attach div as a dialog in jquery在 jquery 中分离和附加 div 作为对话框
【发布时间】:2012-09-01 14:22:06
【问题描述】:

我有一个带有一些 id 的 div,其中包含一些按钮/标签。它本身就是一个容器。我想要一个按钮,当用户单击该按钮时,对话框必须以相同的 div 出现,但 div 必须从页面中消失。因此,当单击“分离”按钮时,会出现一个带有该 div 的对话框,并且按钮会变为“附加”。单击附加时,对话框消失,页面上出现常规 div。

这是我到目前为止所尝试的,它仅在单击分离时有效,如果单击附加对话框关闭但常规 div 不显示。

   $(document).on('click', '#detach', function() {
      var button = $(this).text();
          if (button == 'Detach') {
           $('.search_div_box').dialog({ autoOpen: false, width: 700 });
           $('.search_div_box').dialog('open');
              $(this).html('Attach');
          } else if (button == 'Attach') {
             $('.search_div_box').dialog('close');
             $(this).html('Detach');
          }

      });

我知道我在附加部分丢失了一个代码,它只会关闭对话框,但我尝试了各种方法,比如再次将 div 附加到正文等等,但没有奏效。谢谢

【问题讨论】:

    标签: javascript jquery html dialog jquery-ui-dialog


    【解决方案1】:

    试试这个:

    html:

    <button id="button">Attach</button>
    

    javascript (jquery):

    $("#button").click(function() {
        var button = $(this).html();
        if (button === "Attach") {
            $('.search_div_box').dialog('close');
            $(this).html('Detach');
        }
        else {
            $('.search_div_box').dialog({ autoOpen: false, width: 700 });
            $('.search_div_box').dialog('open');
            $(this).html('Attach');
        }
    });
    

    应该可以的:)

    【讨论】:

    • 我看不出这与我的代码有什么不同,您刚刚切换了 if/else。无论如何我都试过了,它和我的代码完全一样。在分离单击时,它会显示带有 div 的对话框,在附加单击对话框中消失,但 div 在页面上也不可见。单击附加后,我希望该 div 显示在页面上
    • 关闭对话框并希望它仍然可见是没有意义的......对话框是一个单独的窗口,您可以弹出和关闭它。
    • 我不希望对话框可见,我希望对话框的内容在页面上显示为在分离之前的状态。在分离 div 之前,在页面右上角显示分离时单击的 div 消失并在附加它时显示在对话框中,对话框消失并且在右上角没有什么可显示的
    【解决方案2】:

    试试这个:

    HTML

    <button class="content detach"></button>
    

    CSS

    .content.detach:after {
       content: "Detach";
    }
    .content.attach:after {
       content: "Attach";
    }
    

    JS

        $('.search_div_box').dialog({ autoOpen: false, width: 700 });
    $(".content, .ui-dialog-titlebar-close").on("click", function(){
        if ($(".content").hasClass("detach")) {
    
            $('.search_div_box').dialog('open');
        } else {
            $('.search_div_box').dialog('close');
        }
    
        $(".content").toggleClass("detach attach");
    });
    

    演示: http://jsfiddle.net/n8Mbz/

    【讨论】:

    • 再次和我的代码一样。在分离时,它确实显示了一个包含 div 的对话框,但是当单击附加时,对话框消失并且 div 也是如此。我希望在单击附加时将该 div 附加到页面或显示在页面上的任何位置。
    【解决方案3】:

    您可以使用 jQuery 的 $.clone() 创建 div 的副本,然后将其与对话框一起显示/隐藏,如下所示:

    var $original = $('.search_div_box');
    var $clone = $('.search_div_box').clone();
        $clone.dialog({
                autoOpen: false,
                width: 700,
            });
    
    $(document).on('click', '#detach', function() {
        var button = $(this).text();
    
        if (button == 'Detach') {
            $original.hide();
            $clone.dialog('open');
    
            $(this).html('Attach');
        } else if (button == 'Attach') {
            $original.show();
            $clone.dialog('close');
    
            $(this).html('Detach');
        }
    });​
    

    JSFiddle Here

    【讨论】:

    • 效果很好,谢谢。当它克隆它时,它不会克隆 PHP 和 JQUERY 生成的数据。我有一个小框显示某物的总计数,当附加的总显示为 185 时,分离的对话框总显示为 0
    • 没关系,我添加了 $clone.html($original.html());内部分离部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多