如何通过控制';是否将ID转换为外部javascript文件?
我正在尝试调用一个外部JavaScript函数,该函数接受以下3个参数:如何通过控制';是否将ID转换为外部javascript文件?,javascript,c#,asp.net,Javascript,C#,Asp.net,我正在尝试调用一个外部JavaScript函数,该函数接受以下3个参数: function CalculateSum(grdID, hiddenID, TargetColumnIndex) { debugger; var oDataGrid = document.getElementById("<%= grdID.ClientID %>"); var tableRows = oDataGrid.rows; var sum = 0; for (v
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;
}
}
函数CalculateSum(grdID、hiddenID、TargetColumnIndex){
调试器;
var oDataGrid=document.getElementById(“”);
var tableRows=oDataGrid.rows;
var总和=0;
对于(var i=1;i
这就是我所说的:
<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'未定义
- 我试图传递的参数是:
是一个grdPlanObjectivesStandardWeights
asp:GridViewID
是一个hidden
asp:hiddenfield id
是一个整数值2
- 我甚至不能调试这个函数
- 此处定义的函数:
我的代码/方法有什么问题?从您的标记来看,您似乎正在使用asp.net MVC,或者至少是asp.net。如果是这种情况,则需要注册脚本 类似于以下的方法应该可以工作:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
你可以找到更多
进一步说明我的答案。在web表单代码隐藏中,将以下内容放置在页面加载方法中:
Page.RegisterClientScriptBlock("MyScript",
"<script language=javascript src='MyJavaScriptFile.js'>");
Page.RegisterClientScriptBlock(“MyScript”,
"");
然后,您应该能够引用您的JS函数看起来您正试图将aspnet控件ID作为变量发送到客户端,然后将它们与
ClientID一起使用
您或者不将ID作为变量发送,而只是将aspnet ID与ClientID一起使用
<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>
请注意,
在外部文件中不起作用,
因此,第二种选择会更好。coureCalculateSum(“,”,2)
的属性应放在aspx页面上
您是否考虑过尝试为控件设置clientdmode=“Static”
,并按原样引用id名称?检查您是否正确地将javascript文件包含在页面标题中。我应该在前面提到。。正确包含JS文件。以及Manish的观点,确保该方法对页面可见。如果你已经完成了Manish的观点,它可能被错误地隐藏在某些东西里面。另一个检查是有警报(CalculateSum);在页面底部。如果它显示了您的功能,则它被正确地包含。否则它对调用方法不可见或不可见。@VDWWD不是编辑我的问题(删除正文中的2个字符),您应该将其作为一个明确的问题进行投票。!!你完全正确。我忘了。我用的是ASP.NETWebForms。你不能更具体一点吗?我不能使用第一种方法,因为我使用的是外部JS文件函数,但我将尝试第二种方法,并返回反馈,以便你也可以从代码后面调用。我添加了一个片段。基本上,gridview添加了ClientMode属性,然后您应该能够从客户端JS引用它作为document.getElementById(“grdPlanObjectivesStandardWeights”)。。。不需要脚本引用。您还可以为隐藏控件执行以下操作(添加ClientMode)
<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);