一般信息:
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.');
}
答案 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