部分回发后,更新面板中的Javascript不起作用

时间:2011-10-19 15:39:34

标签: javascript jquery asp.net updatepanel ajaxcontroltoolkit

 <script type="text/javascript">
        $(function () {
            $('.datePicker').datetimepicker({ dateFormat: 'dd/mm/yy' });
        });
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:TextBox ID="TextBox1" class="datePicker" runat="server"></asp:TextBox>
    <asp:UpdatePanel ID="holder" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:DropDownList runat="server" ID="ddl_RespondBy" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
                <asp:ListItem Selected="True">1 Hour</asp:ListItem>
                <asp:ListItem>Other</asp:ListItem>
            </asp:DropDownList>
            <asp:TextBox ID="txt_RespondBy" class="datePicker" Visible="true" runat="server" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ddl_RespondBy" EventName="SelectedIndexChanged" />
        </Triggers>
    </asp:UpdatePanel>
</asp:Content>

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddl_RespondBy.SelectedItem.Text == "Other")
        {
            txt_RespondBy.Visible = true;
        }
        else
        {

        }
    }

我使用更新面板进行部分回发,我有两个文本框,一个在更新面板外面,一个在内部,当我从下拉列表中选择其他内容并尝试打开txt_RespondBy文本框内的日历时,它没有显示,但更新面板外的文本框显示日历。为什么Javascript在部分回发后无法在更新面板内工作

3 个答案:

答案 0 :(得分:13)

将datetimepicker初始化代码放在pageLoad函数中,只要页面加载(异步或同步),就会调用该函数。

<script type="text/javascript">
    function pageLoad(sender, args) {
        $('.datePicker').datetimepicker({ dateFormat: 'dd/mm/yy' });
    }      
</script>

答案 1 :(得分:2)

您可以使用pageLoad.live

参考资料: $(document).ready() and pageLoad() are not the same

<强> .live:

Jquery .live works but not with .datepicker

$(function(){
    $('.datePicker').live('click', function() {
        $(this).datepicker({showOn:'focus'}).focus();
    });
});

<强>页面加载():

function pageLoad(sender, args) {
    $('.datePicker').datetimepicker({ dateFormat: 'dd/mm/yy' });
}     

答案 2 :(得分:0)

我理解这是一个古老的问题,但是如果有人现在或以后访问此页面寻求帮助,我还会在此处发布一个答案。 可以使用

  

$(document).on()

因为它确保了只要页面加载,控件就绑定到事件。它的工作类似于页面加载事件,但是可以说语法是不同的。几乎适用于所有这一切。我在一个面板中有50多个控件,并且所有控件都可以执行不同的任务,而且我从来没有遇到麻烦..甚至在我使用此功能时也没有遇到过。

     $(document).on('eventName', 'element' , function(){
     //your code to perform some task; 
});
  

eventName可以是任何事件-例如单击,更改,选择。

还有

  

元素-可以是名称,类名,ID

示例-上述问题-

  

html-

<script src="lib/bootstrap-datepicker/js/bootstrap-datepicker.js"></script>
<input type="text" class="datePicker" data-provide="datepicker-inline" data-date-format="mm/dd/yyyy">
  

JavaScript-

$(function(){
     $(document).on('click', '.datePicker' , function(){
     $(this).datepicker();
    });
});