【发布时间】:2015-07-12 03:22:09
【问题描述】:
一般信息:
Aspx 页面包含一个 Ascx 用户控件。在 User 控件中,Repeater 包含在 View 中,包含在 Multiview 中。 Asp.Net 2.0 框架/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.');
}
【问题讨论】:
-
在函数中,该行以
var cb = ...开头,在您的错误描述中以var inpt = ...开头。这是疏忽吗? -
嗨,蒂姆,感谢您指出这一点。这是一个疏忽。我更正了我的帖子。
-
你的按钮在中继器旁边吗?如果是这样,您可以使用 DOM-Model 来获取他。另一个问题:您的 Javascript 位于页面的什么位置,还是包含在页面内?
标签: javascript asp.net repeater