我试图调用接受3个参数的外部JavaScript函数,如下所示:
function CalculateSum(grdID, hiddenID, TargetColumnIndex) {
debugger;
var oDataGrid = document.getElementById("<%= grdID.ClientID %>");
var tableRows = oDataGrid.rows;
var sum = 0;
for (var i = 1; i < tableRows.length; i++) {
var col1 = oDataGrid.rows[i].cells[TargetColumnIndex];
for (j = 0; j < col1.childNodes.length; j++) {
if (col1.childNodes[j].type == "text") {
if (!isNaN(col1.childNodes[j].value) && col1.childNodes[j].value != "") {
sum += parseInt(col1.childNodes[j].value)
}
}
}
}
if (!isNaN(sum)) {
document.getElementById('<%=hiddenID.ClientID %>').value = sum;
}
}
这就是我所说的:
<asp:Button ID="btnSave" runat="server" CssClass="btn btn-primary"
OnClientClick="CalculateSum('grdPlanObjectivesStandardWeights', '#hidden', 2);"
OnClick="btnSave_Click"
Text="<%$Resources:DCAACommon, Save%>"
ValidationGroup="SaveStandardWeight" />
备注:
'CalculateSum' is undefined
。我试图传递的参数是:
grdPlanObjectivesStandardWeights
是asp:GridViewID
。
hidden
是asp:HiddenFieldID
。
2
是一个int值。
我甚至无法调试此功能。
此处定义的功能:<script src="../../Common/Scripts/SummationOfAGridviewColumnValues.js"></script>
我的代码/方法出了什么问题?
答案 0 :(得分:1)
从您的标记看,您似乎正在使用asp.net MVC,或者至少是asp.net。如果是这种情况,则需要注册脚本。
以下内容应该有效:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
您可以找到更多at this MSDN article
扩展我的答案。在您的Web表单代码中,将以下内容放在Page_Load方法中:
Page.RegisterClientScriptBlock("MyScript",
"<script language=javascript src='MyJavaScriptFile.js'>");
然后您应该能够引用您的JS函数
答案 1 :(得分:1)
看起来您正在尝试将aspnet控件ID作为可变客户端发送,然后将其与ClientID
一起使用。
您要么不将ID作为变量发送,只需使用带有ClientID的aspnet ID
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
<asp:HiddenField ID="HiddenField1" runat="server" />
<script type="text/javascript">
function CalculateSum(TargetColumnIndex) {
var oDataGrid = document.getElementById("<%= GridView1.ClientID %>");
if (!isNaN(sum)) {
document.getElementById('<%=HiddenField1.ClientID %>').value = sum;
}
}
</script>
或者将正确的ID发送给该功能,但之后您不再需要<%= GridView1.ClientID %>
<script type="text/javascript">
CalculateSum("<%= GridView1.ClientID %>", "<%= HiddenField1.ClientID %>", 2)
function CalculateSum(grdID, hiddenID, TargetColumnIndex) {
var oDataGrid = document.getElementById(grdID);
if (!isNaN(sum)) {
document.getElementById(hiddenID).value = sum;
}
}
</script>
或从后面的代码打电话
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "CalculateSum", "CalculateSum('" + GridView1.ClientID + "', '" + HiddenField1.ClientID + "', 2)", true);
请注意,
<%= GridView1.ClientID %>
无法在外部文件中使用, 所以第二种选择会更好。然后应将coureCalculateSum("<%= GridView1.ClientID %>", "<%= HiddenField1.ClientID %>", 2)
放在aspx页面上。
答案 2 :(得分:1)
您是否曾考虑尝试为控件设置ClientIdMode="Static"
,并按原样引用ID名称?