2017-01-05 29 views
1

我试图调用外部JavaScript功能接受如下3个参数:如何将控件的ID传递给外部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
  • 我试图传递的参数是:

    grdPlanObjectivesStandardWeightsasp:GridViewID

    hiddenasp:HiddenFieldID

    2是一个int值。

  • 我甚至无法调试此功能。

  • 的功能定义如下:<script src="../../Common/Scripts/SummationOfAGridviewColumnValues.js"></script>

什么是错我的代码/方法呢?

+1

检查,如果你是正确的,包括在页面与否的头JavaScript文件。 – Manish

+0

我应该在之前提到的JS文件包括正确。 – Null

+0

除了Manish的观点,请确保该方法对页面可见。如果你已经完成了Manish的观点,它可能会被错误地隐藏在内部。另一个检查是有位于页面底部。如果它显示你的功能,那么它包含正确。否则,调用方法不可见或不可见。 –

回答

1

看起来你要发送的ASPNET控制ID的可变客户端,然后与ClientID一起使用它们。

你要么不发送的ID为变量,只是使用ASPNET ID与客户端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 %>将不会在外部文件中工作,因此第二个选项将会更好, 。然后应该将该coure CalculateSum("<%= GridView1.ClientID %>", "<%= HiddenField1.ClientID %>", 2)放置在aspx页面上。

+0

因为我使用一个外部JS文件功能我无法使用第一种方法,但我会尝试第二个,并很快回来饲料返回 – Null

+1

您也可以从代码中调用后面。我已经添加了一个片段。 – VDWWD

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功能

+0

我正在使用ASP.net webforms。你不能更具体吗? – Null

1

您是否考虑过尝试为您的控件设置ClientIdMode="Static",并且只引用id名称?

+0

如果你告诉我一个例子如何做到这一点,会很酷。 – Null

+0

基本上你的GridView中的ClientIDMode属性增加的然后你应该能够从客户端JS refrence它的document.getElementById( “grdPlanObjectivesStandardWeights”); ...不需要脚本引用。你也可以为你的隐藏控件做(添加ClientIDMode) – Dave

相关问题