代码之家  ›  专栏  ›  技术社区  ›  Tommy Jakobsen

jquery dialog+asp.net按钮-奇怪的行为

  •  0
  • Tommy Jakobsen  · 技术社区  · 16 年前

    使用此分区:

    <div id="advSearchDialog" style="visibility:hidden;">
        <xx:search ID="searchUC" runat="server" />
    </div>
    

    还有一个按钮:

    <input type="button" id="btnAdvSearch" value="Search" />
    

    我把它转换成jquery对话框,按钮打开对话框:

    $(document).ready(function() {
        $('#advSearchDialog').dialog({
            autoOpen: false,
            height: 500,
            width: 600,
            modal: true,
            bgiframe: true,
            title: 'Avanceret søgning',
            open: function(type, data) {
                $(this).parent().appendTo("form");
            }
        });
    
        $('#btnAdvSearch').click(function() {
            $('#advSearchDialog').css('visibility', 'visible');
            $('#advSearchDialog').dialog('open');
        });
    });
    

    使用ASP.NET,我遇到了一个问题。

    如果我按下ASP.NET页面上的其他按钮(在更新面板内),然后单击btnadvsearch按钮,则不会发生任何事情。为什么?

    提前谢谢

    2 回复  |  直到 15 年前
        1
  •  3
  •   marc.d    16 年前

    也许部分页面刷新会删除您的点击事件,很难说没有看到整个页面。

    该问题的解决方案是使用jquery实时事件 http://docs.jquery.com/Events/live

    高温高压

        2
  •  0
  •   OneSHOT    16 年前

    使用firebug或类似的somthing检查发出的HTML,您可能会注意到您的按钮不再位于表单标记内,并且位于body标记的末尾。

    在You're OK按钮回调中,您可以使用

    dialogBox.appendTo($('#FormIdHere'));
    

    对话框也是一个变量集。

    var dialogBox = $('#DialogDiv').dialog({ autoOpen: false });
    

    这应该将您的按钮重新添加到表单中。

    编辑:

    这是我最近使用的代码段(下面的所有代码都是在onload函数中激发的,但reasonPostback必须在onload函数之外声明)

    var button = $('input.rejectButton');
    reasonPostBack = button.attr('onclick');
    button.removeAttr('onclick');
    
    var dialogBox = $('#ReasonDiv').dialog({ autoOpen: false, title: 'Please enter a reason', modal: true, bgiframe: true, buttons: { "Ok": function() {
    
                if ($('input.reasonTextBox').val().length > 0) {
                    $(this).dialog('close');
                    dialogBox.appendTo($('#theform'));
                    reasonPostBack();
                }
                else 
                {
                      alert('You must enter a reason for rejection');
                }
            }
        }
    });
    
    
    button.click(function() {
        dialogBox.dialog('open');
        return false;
    });
    

    首先,我引用.NET回发

    var reasonPostBack = button.attr('onclick');
    

    然后再按住它,然后从按钮中去掉点击事件,以“自动”停止后视。然后,我构建对话框并为OK按钮添加一个匿名函数,这将运行我的代码来测试文本框中是否有任何内容,如果没有,它只会简单地提醒用户,否则它会;

    关闭div

    $(this).dialog('close');
    

    将DIV添加回表单标记中,以备回发

    dialogBox.appendTo($('#theform'));
    

    然后调用原始回发

    reasonPostBack();
    

    最后一位代码

    button.click(function() {
        dialogBox.dialog('open');
        return false;
    });
    

    将我们自己的事件处理程序添加到.NET按钮以打开先前实例化的对话框。

    高温高压

    单热的