0

我在转发器中有两个文本框(在同一个项目中)。当我输入一个值然后离开时,我想对该值进行一些处理,然后用处理结果填充另一个。我想做这个客户端。

我对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>

我似乎无法弄清楚如何找到另一个文本框来更新其文本。我什至不确定这是最好的方法,如果有更好的方法,我愿意接受替代方案。

*编辑

我使用不同的方法完成了这项工作。我已将其添加为答案,以防有人在未来寻找。

4

2 回答 2

1

您可以通过它们的标记名获取输入,然后从返回的集合中选择它们:

var txtMarkup = sender.parentNode.getElementsByTagName('input')[0];
var txtPercentage= sender.parentNode.getElementsByTagName('input')[1];

我倾向于使用这样的东西来获取客户端 ID 到 javascript:

document.getElementById('<%= txtMarkup.ClientID %>').value = 'some value';

但如果你在中继器内,这可能需要调整。

于 2013-05-10T15:54:29.337 回答
0

我最终改变了解决问题的方法,并且能够让一切正常运行。下面是我使用的代码。它是VB,但它很容易翻译。ClientIDModes 都设置为“继承”。

标记:

<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
于 2013-05-10T18:14:23.370 回答