weimha
asked on
javascript events when using NumericUpDown extender in gridview
I have a couple of javascript functions that fire on the onkeyup event for a textbox in a gridview. Now I've added a NumericUpDown extender to the textbox and I want the same javascript functions to fire when the value in the textbox changes when using the NumericUpDown extender control but I don't know how to link the javascript functions to the extender control.
My code is shown below.
My code is shown below.
JAVASCRIPT CODE
function SumItUp(textResult)
{
var x = 0;
var y = 0;
var myArray = new Array();
//add array items, this calls the public server variable we build in rowdatabound
<%= JSArray %>
//sum it:
for (x = 0; x < myArray.length; x++)
{
//multiply the value times one to trick js into always thinking the variable is a number
y = y + (myArray[x] * 1);
}
//display the result
document.getElementById(textResult).value = (y * 1);
}
function Multiply(text1, text2, textResult)
{
var x = document.getElementById(text1).value;
var y = document.getElementById(text2).value;
if(IsNumeric(x) == true && IsNumeric(y) == true)
{
document.getElementById(textResult).value = (x * 1) * (y * 1);
}
else
{
document.getElementById(textResult).value = '';
}
}
function IsNumeric(sText)
{
var ValidChars = "0123456789.-";
var IsNumber=true;
var Char;
for (i = 0; i < sText.length && IsNumber == true; i++)
{
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1)
{
IsNumber = false;
}
}
return IsNumber;
}
ASPX CODE
<asp:TemplateField HeaderText="# to Buy">
<ItemTemplate>
<asp:TextBox ID="txtNumberToBuy" runat="server" AutoPostBack="False" BorderColor="#759CAC"
BorderWidth="1px" CausesValidation="True" SkinID="TextBoxSkin" TabIndex="20"
Width="30px">1px</asp:TextBox>
<cc1:NumericUpDownExtender ID="txtNumberToBuy_NumericUpDownExtender"
runat="server" Enabled="True" Maximum="1.7976931348623157E+308"
Minimum="-1.7976931348623157E+308" RefValues="" ServiceDownMethod=""
ServiceDownPath="" ServiceUpMethod="" Tag="" TargetButtonDownID=""
TargetButtonUpID="" TargetControlID="txtNumberToBuy" Width="75">
</cc1:NumericUpDownExtender>
<asp:HiddenField ID="hfTotal" runat="server" Value="0.0" />
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtNumberToBuy"
Display="Dynamic" ErrorMessage="Integer Value Required" Operator="DataTypeCheck"
Type="Integer"></asp:CompareValidator>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="100px" />
</asp:TemplateField>
C# Code
protected void gvMealsForSell_RowDataBound(object sender, GridViewRowEventArgs e)
{
TextBox txtNumberToBuy = (TextBox)e.Row.FindControl("txtNumberToBuy");
if (txtNumberToBuy != null)
txtNumberToBuy.Text = "0";
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Get values for calculation
TextBox txtQuantity = new TextBox();
HiddenField hfMealPrice = new HiddenField();
HiddenField hfTotal = new HiddenField();
txtQuantity = (TextBox)e.Row.FindControl("txtNumberToBuy"); // quantity
hfMealPrice = (HiddenField)e.Row.FindControl("hfMealPrice"); // meal price
hfTotal = (HiddenField)e.Row.FindControl("hfTotal"); //total
// Add javascript to text box with calcualtion values
txtQuantity.Attributes.Add("onkeyup", "javascript:Multiply('" + txtQuantity.ClientID + "','" + hfMealPrice.ClientID + "','" + hfTotal.ClientID + "');SumItUp('" + this.txtTotalDue.ClientID + "');");
//Set up javascript array
JSArray += "myArray[" + counter.ToString() + "] = document.getElementById('" + hfTotal.ClientID + "').value;" + Environment.NewLine;
//counter to maintain the js array index
counter += 1;
}
}
ASKER
But since the extender is in the gridview rows, I don't know what name it is rendered with. How can I find it in the $find function?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Open in new window