我在转发器中有两个文本框(在同一个项目中)。当我输入一个值,然后离开时,我想对该值进行一些处理,然后用处理结果填充另一个。我想做这个客户端。
我对javascript很新。我已经达到了:
<asp:TextBox ID="txtMarkup" runat="server" onblur='calculateValues(this,"txtPercentage")'></asp:TextBox>
<asp:TextBox ID="txtPercentage" runat="server" onblur='calculateValues(this,"txtMarkup")'></asp:TextBox>
//Some code
<script type="text/javascript">
function calculateValues(sender, target) {
//Perform calculations
var parent = sender.parentNode //get the container, so I can get the appropriate target
//This is where I'm having trouble
}
</script>
我似乎无法弄清楚如何找到其他文本框,以更新其文本。我也不确定这是最好的方法,如果有更好的方法,我愿意接受替代方案。
*的修改
我使用不同的方法工作。我已将其添加为答案,以防任何人在将来展望。
答案 0 :(得分:1)
您可以通过标记名获取输入,然后从返回的集合中选择它们:
var txtMarkup = sender.parentNode.getElementsByTagName('input')[0];
var txtPercentage= sender.parentNode.getElementsByTagName('input')[1];
我倾向于使用类似的东西将客户端ID转换为javascript:
document.getElementById('<%= txtMarkup.ClientID %>').value = 'some value';
但如果你在转发器里面,这可能需要调整。
答案 1 :(得分:0)
我最终改变了解决问题的方法,并且能够让一切运转良好。以下是我使用的代码。这是VB,但很容易翻译。 ClientIDModes都设置为&#34;继承。&#34;
标记:
<asp:Repeater ID="rptEstimateDetails" runat="server">
<ItemTemplate>
<asp:TextBox ID="txtPprPriceDtlQuoted" runat="server"></asp:TextBox>
<asp:TextBox ID="txtPprPriceDtlMarkup" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:Repeater>
<script type="text/javascript">
function CalculateValues(sender, target) {
//Sender & Target come in pointing exactly where they need to be
//Perform calculations
document.getElementById(target).value = //Calculated value
}
</script>
代码隐藏:
Private Sub rptEstimateDetails_ItemCreated(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptEstimateDetails.ItemCreated
Dim quoteTxt As TextBox = e.Item.FindControl("txtPprPriceDtlQuoted")
Dim markupTxt As TextBox = e.Item.FindControl("txtPprPriceDtlMarkup")
Const prefix As String = "MainContent_rptEstimateDetails_"
quoteTxt.Attributes.Add("onblur", "Javascript:CalculateValues('" & prefix & quoteTxt.ClientID & "', '" & prefix & markupTxt.ClientID & "');")
markupTxt.Attributes.Add("onblur", "Javascript:CalculateValues('" & prefix & markupTxt.ClientID & "', '" & prefix & quoteTxt.ClientID & "');")
End Sub