确认删除弹出记录计数

时间:2010-11-11 20:47:04

标签: javascript asp.net repeater

一般信息:

Aspx页面包含Ascx用户控件。在User控件内,Repeater包含在View中,包含在Multiview中。 Asp.Net 2.0 framework / C#

详细说明:

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

一切正常,但已被要求添加弹出式“确认删除”消息,其中包含用户在弹出窗口中单击“确定”时将删除的记录数。

像:  “你即将删除8条记录”。

目前我的按钮如下所示:

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

当我点击我的按钮时,我得到了:

错误:'document.getElementById(...)'为null或不是对象 在这一行:

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

为什么JS没有看到我的中继器?是因为它被埋在MultiView中吗?如何更正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 个答案:

答案 0 :(得分:0)

这应该有效:

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

答案 1 :(得分:0)

如果您正在使用母版页或嵌套控件(在ascx,view等内部),框架将更改使用元素呈现的ID。

如果您执行“查看源代码”或使用FireBug,您可能会发现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