代码之家  ›  专栏  ›  技术社区  ›  Doug

用记录计数确认删除弹出窗口

  •  1
  • Doug  · 技术社区  · 15 年前

    Aspx页包含Ascx用户控件。在用户控件中,中继器包含在视图中,包含在多视图中。 Asp.Net 2.0框架/C#

    我有一个显示记录的中继器(在ascx用户控件中),第一列是一个复选框。如果选中,该行将被删除。 在中继器之外,我有一个按钮,它将删除所有选中的行。

    一切正常,但已被要求添加一个弹出的“确认删除”消息,其中包括将被删除的记录数量,如果用户点击“确定”在弹出窗口。

    类似于:

    当前我的按钮如下所示:

        <asp:Button ID="btnDeleteAllRecords" runat="server" Text="Delete all Checked Records" Onclick="btnDeleteAllRecords_Click" OnClientClick="javascript:GetCbCount();" />
    

    我有这个javascript代码块:

    <script type="text/javascript">
    function GetCbCount()   
    {
    var cb = document.getElementById("rptrVoicemail").getElementsByTageName("input");
      var cbCount;   
    for(i = 0;  i < cb.lenght; i++)   
    {   
        if(cb[i].type == "checkbox")   
        {   
            if(cb[i].checked)   
            {   
                cbCount =  cbCount + 1;   
            }               
        }       
    }
    return confirm('You are about to delete' + cbCount + 'records.');
    
    } 
    </script>
    

    在这条线上:

    var cb = document.getElementById("rptrVoicemail").getElementsByTageName("input");
    

    为什么JS没有看到我的中继器?是因为它埋在一个多视图中吗?如何更正JS以便弹出窗口在消息中显示记录计数?

    更新 : 我把剧本改成了:

    function GetCbCount(){ 
       var inpt = document.getElementById("vmDiv"); 
       var checkboxes = inpt.getElementsByTagName("input"); 
       var cbCount; 
       for(i = 0; i<checkboxes.lenght;i++){ 
          if (checkboxes[i].type == "checkbox" && checkboxes[i].checked){ 
             cbCount = cbCount + 1;
          } 
       } 
       return confirm('You are about to delete ' + cbCount + ' Voicemails.'); 
    } 
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   Tim Schmelter    15 年前

    这应该有效:

    document.getElementById('<%= rptrVoicemail.ClientID %>').getElementsByTageName("input");
    

    另一种方法是返回ClientID的小脚本。甚至可以将其添加到包含的JS文件中。

    function GetClientId(strid)
    {
         var count=document.forms[ 0 ].length ;
         var i = 0 ;
         var eleName;
         for (i = 0 ;  i < count ;  i++ )
         {
           eleName = document.forms [ 0 ].elements[ i ].id;
           pos=eleName.indexOf( strid ) ;
           if(pos >= 0)  break;          
         }
        return eleName;
     }
    

    找到 here

        2
  •  0
  •   Leon    15 年前

    如果使用母版页或嵌套控件(在ascx、视图等内部),框架将更改用元素呈现的id。

    rptrVoicemail 变得像 ctl00_ContentPlaceHolder1_someUserControl_ctl00_multiViewID_ctl28_rptrVoicemail .

    getElementById('<%= rptrVoicemail.ClientID %>') 获取元素的ID,因为它将在客户端呈现。

    var rptr = document.getElementById('<%= rptrVoicemail.ClientID %>'); rptr.borderColor = 'pink'; // draw a border to check it's the right element