如何在第二个堆叠模式对话框中包含jquery ui小部件?

时间:2016-02-18 00:00:16

标签: javascript jquery jquery-ui cakephp-3.0

我目前在模式对话框中有一个表单,其中有一个链接可以在其中一个选择下拉列表中添加/编辑选项。此链接会根据需要在旧版本上打开一个新的模式对话框。但是,我似乎无法在第二个模态对话框(特别是手风琴和日期选择器小部件)中使用任何jquery ui小部件。我已经关注How to execute jquery inside a Modal window?并且在第一个模态对话框中使用了手风琴和日期选择器小部件。

Code I尝试过第二次模态对话(不工作):

    $(document).on("click", ".view_dialog_2", function(event) {    
            $dialog_2.load($(this).attr('href'), function()
            {
                $('#accordian').addClass('accordian2');
                $('#meeting_date').addClass('date2');
                $('#follow_up_date').addClass('date2');
                $(function() {
                $( ".accordian2" ).accordion();
                    collapsible: true;
                });
                $(function() {
                    $( ".date2" ).datepicker();
                });
                $dialog_2.dialog('open');
            });
            return false;
        });

当前用于第一个模态对话框的代码:

    $(".view_dialog").click(function(){
            $dialog.load($(this).attr('href'), function()
            {
                $(function() {
                    $("#addPartNum, .order-button")
                            .button();
                });
                $(function() {
                    $( "#meeting_date" ).datepicker();
                });
                $(function() {
                    $( "#follow_up_date" ).datepicker();
                });
                $dialog.dialog('open');
            });

            return false;
        });

我已尝试删除第二个对话框的$(document).on事件绑定,但它只是带我到任何模式对话框的链接页面。我尝试添加类,因为我认为可能存在冲突,因为datepickers也出现在第一个对话框中。 这是我使用jquery的第一个项目,我大部分时间都在使用它,但是这个让我很难过。任何帮助将不胜感激:)

编辑:这是第二个不工作对话框的对话框代码(如果有必要,不确定)

    var $dialog_2 = $("#view_dialog_2").dialog(
        {
            autoOpen: false,
            height: 800,
            width: 800,
            resizable: true,
            modal: true,
            buttons: {
                "Submit": function() {
                    // do stuff 
                    $dialog_2.dialog("close");
                },
                "Cancel": function() {
                    $dialog_2.dialog("close");
                }
            }

        });  

编辑#2:这是一个jsfiddle,可以更多地展示我的问题:https://jsfiddle.net/8pfjz3k5/

1 个答案:

答案 0 :(得分:0)

可能不止一种方法可以做到这一点,但这是一个简单的示例,您可以从以下开始:https://jsfiddle.net/7xo1Lcy1/

<强> HTML

<div id="start-box" title="First Form">
  <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Form</p>
  <a id="add" href="#">Add/Edit</a>
  <div id="add-box">
    <label>Next</label>
    <input type="text" />
  </div>
  <script>
    $("#add-box").dialog({
      autoOpen: false,
      resizable: true,
      modal: true,
      buttons: {
        "Submit": function() {
          // do stuff 
          $(this).dialog("close");
        },
        "Cancel": function() {
          $(this).dialog("close");
        }
      }
    });
  </script>
</div>


<a id="start" href="#dialog-conf">Start Here</a>

<强> JQuery的

$(function() {
  $("#start-box").dialog({
    autoOpen: false,
    resizable: false,
    height: 340,
    modal: true,
    buttons: {
      "Save": function() {
        $(this).dialog("close");
      },
      Cancel: function() {
        $(this).dialog("close");
      }
    }
  });
  $("#start").button();
  $("#start").click(function() {
    $("#start-box").dialog("open");
  });
  $("#start-box").on("click", "#add", function(e) {
    console.log("Launching Add Box.");
    $("#add-box").dialog("open");
  });
});

所以你可以看到我离开了$(document) .on()。这应该在对话框打开时查找Click事件。然后它会打开下一个对话框(第一个仍在后台)。

我希望有所帮助。

修改

您没有初始化.accordion()。请参阅更新您的小提琴:https://jsfiddle.net/Twisty/8pfjz3k5/2/

$("#accordian").accordion();

确保您的选择器正确并且您调用了正确的方法。