Javascript在ASP.NET转发器内自动计算

时间:2013-05-10 14:53:31

标签: javascript asp.net repeater

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

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

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

*的修改

我使用不同的方法工作。我已将其添加为答案,以防任何人在将来展望。

2 个答案:

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