【问题标题】:jquery dialog box doesn't work in accordion mvc razorjquery 对话框在手风琴 mvc razor 中不起作用
【发布时间】:2012-02-10 21:19:01
【问题描述】:

我正在开发 razor 项目,我需要在其中显示 jquery 模态弹出窗口。当弹出窗口不是从手风琴启动时,它显示得很好,但是一旦我把它放在那里,按钮就不会显示弹出窗口,而是从不同的按钮触发功能。

我在标记中有这个:

@using (Html.BeginForm("ASPXView", "Report", FormMethod.Post)) {
    @Html.ValidationSummary(true, 
         "Password change was unsuccessful. Please correct the errors and try again.")
    <div>
        @Html.Hidden("Id", Model.Report.Id)
        <div id="accordion">

            @foreach (var item in Model.Parameters)
            {
                <h3><a href="#">@Html.LabelFor(m => item.Name, item.Prompt)</a></h3>
                <div>
                    <div class="editor-label">
                        Search @*Html.TextBox("Search")*@ 
                        <input id="@("Search" + item.Name)" type="text" name="q" data-autocomplete="@Url.Action("QuickSearch/" + item.Name, "Report")" />
                    </div>

                    <div class="editor-field">
                        <select multiple id="@("Select" +item.Name)" name="@("Select" +item.Name)"></select>                           
                    </div>

                    <div class="removed">                     
                     <button id="opener">Open Dialog</button>               
                    </div>              
                </div>
            }         
        </div>
        <p style="text-align: right">
            <input type="submit" value="Submit" />
        </p>
    </div>
}
<div id="dialog" title="Basic dialog">
    <p>Test Content.</p>
</div>

JS代码:

<script type="text/javascript">
    var openDialog = function () {

        $('#dialog').dialog('option', 'buttons', {
            "Cancel": function () {
                $('#dialog').dialog('close');
            }
        });


        $('#dialog').dialog('open');

    };
    $(function () {
        $("#dialog").dialog({
            autoOpen: false,
            show: "blind",
            hide: "explode"
        });
        $('#opener').click(openDialog);
    })

</script>

正如我所说,当我将打开对话框放置在对话框 div 下方时,在手风琴 div 之外,弹出窗口正常出现,但是一旦我将按钮放在那里,弹出窗口就不会出现。

提前感谢您的每一个建议


JS 代码更新:

<script type="text/javascript">
    $(function () {
        $('#opener').click(function () {
            $("#dialog").dialog('destroy');
            $("#dialog").attr("title", "Your Title Heren");
            $("#dialog").dialog({
                height: 620,
                width: 700,
                modal: true
            });
        });

    })
</script>

用此代码替换我的代码后,我只能从手风琴中的第一项看到弹出窗口,但看不到其他两项。 此外,一旦弹出窗口出现在屏幕上,就会发生回发,并且附加到另一个按钮的事件,就会发生提交按钮。你为什么这么认为?

谢谢

【问题讨论】:

    标签: javascript jquery asp.net-mvc-3 jquery-ui razor


    【解决方案1】:

    也许你应该拥有这样的 jQuery

    $('button[id^=opener]').click(function (){
     $("#dialog").dialog('destroy');
        $("#dialog").attr("title", "Your Title Heren");
        $("#dialog").dialog({
            height: 620,
            width: 700,
            modal: true
        });
    });
    

    编辑:

    标记应该是这样的

    @int i = 0;
     @foreach (var item in Model.Parameters)
            {
              // your rest of the Code
                    <div class="removed">                     
                     <button id="opener"+i>Open Dialog</button>               
                    </div>              
                </div>
    i++;
            }      
    

    jQuery 选择器会是这样的

    $('button[id^=opener]').click(function (){
    // Rest Continues
    

    【讨论】:

    • 请检查我编辑的代码和下面的描述,解释发生了什么。非常感谢您的帮助
    • $("#dialog").dialog('destroy');会破坏对话框,并且“openDialog”中的事件只是“打开”,摆脱破坏将使对话框多次打开。
    • @HaBo 你的意思是按钮的id,在这种情况下是'opener'?谢谢
    • @HaBo 现在代码什么都不做,甚至不显示弹出窗口。请在此处找到完整的代码,也许您可​​以找出为什么不起作用。 jsfiddle.net/laziale/EA2Dg/7 百万感谢您的帮助。
    • 检查浏览器上的源代码,如何创建按钮的 ID,如果没有创建像 opener0、opener1、opener2 这样的 ID,则将代码更改为
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多