jQuery对话框+ ASP.NET按钮 - 奇怪的行为

时间:2009-07-06 10:19:31

标签: asp.net jquery jquery-ui dialog

有了这个div:

<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 个答案:

答案 0 :(得分:3)

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

该问题的解决方案是使用jquery直播活动 http://docs.jquery.com/Events/live

HTH

答案 1 :(得分:0)

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

在你的OK按钮回调中你可以使用类似

的东西
dialogBox.appendTo($('#FormIdHere'));

dialogBox是一个设置为

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

这应该将您的按钮添加回表单。

编辑:

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

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按钮以打开之前实例化的对话框。

HTH

单稳