Jquery ui 对话框正在打开多个对话框而不是一个

Jquery ui dialog is opening multiple dialogs instead of one

我正在使用 Jquery UI 对话框来显示来自 asp.net mvc 视图列表的一些信息。

所以基本上你去列表,你点击一个图标,你会得到一些关于特定记录的弹出信息

如果页面中只有一个对话框,没有问题,对话框会正常打开,但如果我想有多个对话框,那么当我单击其中任何一个时,所有对话框都会打开。

你能帮我看看我做错了什么吗?

 <td>                    
                <a class="clicker" dialogid="@item.Event.EventId" href="#"> Catering Details </a>
                <div class="dialog @item.Event.EventId" title=""> 
                     <p>@{Html.RenderAction("ViewEvent", "Home", new { EventId = item.Event.EventId });}</p>
                     </div>


                  @if (item.Event.SpecialRequirements != null)
             {
                  <img class="clicker2" dialog2id="@item.Event.EventId" style="margin-left:3px;display:inline;margin-bottom:-3px;cursor: pointer;" title="Special Requirements" src="~/Images/email-alert-icon.png"  /> 
                     <div class="dialog @item.Event.EventId" title="Special Requirements"> 
                     <p>@item.Event.SpecialRequirements</p>
                     </div>
             }  

        </td>

<script>
    $m = jQuery.noConflict();
</script>
<script>

    $m(function ()
    {

        $m('.dialog').dialog({
          autoOpen: false,
          show: { effect: "blind", duration: 1000 },
          hide: { effect: "explode", duration: 1000 },
          width:'800px',
          buttons: {
              Close: function () {
                  $m(this).dialog("close");
              }
          }
        });

      $m(".clicker").on("click", function () {
          $m("." + $(this).attr('dialogid')).dialog("open");
      });     

      $m(".clicker2").on("click", function () {
          $m("." + $(this).attr('dialog2id')).dialog("open");
      });

  });

</script>

您使用了 $m('.dialog')。它将打开您指定的 class 名称的所有对话框。

您可以为每个对话框指定一个唯一的 ID,并将 $m('.dialog') 替换为 $('#dialogId');

使用您的 HTML 结构,我认为您可以避免在此处使用额外的 classes 或 ID(当然,如果您只是为此使用它们)。

考虑以下 HTML:

<td>                    
    <a class="clicker" href="#">Catering Details</a>
    <div class="dialog" title=""> 
        // Your info
    </div>

    @if (item.Event.SpecialRequirements != null)
    {
        <img class="clicker" src="~/Images/email-alert-icon.png"  /> 
        <div class="dialog" title="Special Requirements"> 
            // Your info
        </div>
    }  

</td>

在您的 JS 中,您可以只打开下一个对话框:

$(".clicker").on("click", function () {
    $(this).next('.dialog').dialog("open");
});

编辑:

如果您想使用 id,我想您可以更改第二个对话框的 class:

<td>                    
    <a class="clicker" dialogid="@item.Event.EventId" href="#">Catering Details</a>
    <div class="dialog @item.Event.EventId" title=""> 
        // Your info
    </div>

    @if (item.Event.SpecialRequirements != null)
    {
        <img class="clicker2" dialogid="@item.Event.EventId" src="lalala"  /> 
        <div class="dialog2 @item.Event.EventId" title="Special Requirements"> 
            // Your info
        </div>
    }  

</td>

而 JS 将是:

$m('.dialog, .dialog2').dialog({
    autoOpen: false,
    show: { effect: "blind", duration: 1000 },
    hide: { effect: "explode", duration: 1000 },
    width:'800px',
    buttons: {
        Close: function () {
            $m(this).dialog("close");
        }
    }
});

$m(".clicker").on("click", function () {
    $m(".dialog." + $(this).attr('dialogid')).dialog("open");
});     

$m(".clicker2").on("click", function () {
    $m(".dialog2." + $(this).attr('dialogid')).dialog("open");
});

希望对您有所帮助!