0

我想知道如何从 TextBox 读取值并在单击按钮时分配给另一个 TextBox。此 TextBox 附加到 AJAX CalendarExtender。到目前为止,我有这个。我需要在 Javascript 中的 ShowDate() 函数上使用它。

  <asp:TextBox ID="txtStartDate" runat="server"  ReadOnly="false" Height="28px"    Width="283px"></asp:TextBox>
    <asp:CalendarExtender  ID="ClendarExtender" BehaviorID="CE1"   TargetControlID="txtStartDate" runat="server">
    </asp:CalendarExtender>

    <br />
    <asp:TextBox ID="txtShowMessage" runat="server" Height="76px" 
        style="margin-left: 336px" Width="306px"></asp:TextBox>
    <br />
    <br />
    <asp:Button ID="btnCreateNote" runat="server"  OnClientClick="showDate()"  style="margin-left: 456px" 
        Text="Button" onclick="btnCreateNote_Click" />
    <br />

那么我的js是

 function showDate() {
 var txtDate = document.getElementById('<%=txtStartDate.ClientID  %>');
 document.getElementById("txtShowMessage").value = txtDate;
 }

不知道出了什么问题,textDate 中没有任何价值。

4

2 回答 2

1

尝试更改您的 JavascriptshowDate()方法,例如

<script type="text/javascript" >
        function showDate() {
            var txtDate = document.getElementById('txtStartDate').value;
            document.getElementById('txtShowMessage').value = txtDate;
        }

</script>

我检查了这个功能,它工作正常,希望它对你有用。

于 2013-06-06T04:07:54.307 回答
0

这是因为当您编写时,runat="server"ASP 引擎会在其一侧添加一些字符串。ASP.NET 有一个内置机制 (INamingContainer) 以确保您没有多个名称相同的控件。它通过添加容器前缀来做到这一点。

所以

<asp:TextBox ID="txtShowMessage" runat="server"></asp:TextBox>

会变成类似的东西

<input type="text" id="ctl00_ctl00_txtShowMessage" runat="server" />

所以只是document.getElementById('txtShowMessage')行不通。您需要获取完整的 ID。所以你可以使用document.queryselector('[id$=txtShowMessage]'). 这意味着获取 ID 以 结尾的元素txtShowMessage
否则你可以这样做

document.getElementById('<%=txtShowMessage.ClientID  %>');

注意
1. 我提到的第二种方法更好(使用ClientID)。
2.如果你想知道完整的ID,那就去网页查看它的来源,找到那个TextField并检查ID(它不会每次都改变,这是固定的)
3.更多信息参考这里

于 2013-06-06T04:14:36.237 回答