日期:2014-05-18  浏览次数:20471 次

×××××二个简单的js问题××××××
原以为一点基础的getElementById就可以横行天下了,结果...

废话不说,直接说问题了。
问题描述:
1   看到几行代码
form1.action.value   =   "delete ";
form1.submit();
这是一个按钮的单击前台引发的事件,而且它也有其服务器端单击事件。我查了下,一般都是用form1.action= " "来设置要提交到的页面,但是这段代码究竟是什么意思了?
2   相信大家都看到过checkbox和gridview进行多个记录删除,问题一的代码就是这个问题所属代码的一部分。不过我看了下整体的代码,除了用到selectItem=document.getElementById( "selectItem ")---这个是gridview模版列中itemtemplate的html   checkbox的id,其checkbox的value和每条记录的id绑定了,这句js应该是取的所有checkbox的集合,其他地方未对该集合进行操作了,于是乎问题1中的按钮(删除按钮)单击的后台事件中居然用   selectids=Reuquest.Params[ "selectItem "]
后续的代码就是以逗号来分割字符串从而得到一个字符串数组,而这个字符串数组就是checkbox被选中了的记录的id,于是我就很奇怪,这到底是为什么,为什么Reuquest.Params[ "selectItem "]得到是选中的记录id集,而不是所有的被选中记录的id集

------解决方案--------------------
没用过。为什么不baidu一下呢?
------解决方案--------------------
呵呵。一直对Javascript发怵。本来打算给LZ点信息来着,发现LZ的JS水平比我高……
------解决方案--------------------
我觉得你的那个JS代码有问题
var SelectItem = document.getElementById( "SelectItem ");
如果是getElementById 那么得到的应该是一个控件对象
而你在之后又用到了if(SelectItem[0]!=null)
很明显 你这里的SelectItem是一个集合
所以
var SelectItem = document.getElementById( "SelectItem ");
应该改成
var SelectItem = document.getElementByName( "SelectItem ");

你的gridview中模板列里的checkbox的name属性应该是 name= "SelectItem "

这样,你才能取gridview里的所有checkbox放到一个集合里面,之后才是判断他们的选中状态

至于你JS里的
var SelectAll = document.getElementById( "SelectAll ");
我想应该是表示全选checkbox
定义这个对象 是为了之后方便处理
只要 SelectAll.checked 就知道gridview里的checkbox全选中了


------解决方案--------------------
1。
LZ 你喝高了吧,分析不出来?
我来看看哈

2。
frmAppeal.action.value = "DELETE ";
===========
我猜想这里的 action 应该是一个 input hidden 吧
可不是 <form action= "some.aspx " > 的 action

3。
var SelectItem = document.getElementById( "SelectItem ");
if(SelectItem[0]!=null) {
//
} else {
if(SelectItem.checked) {
//
}
=======
到底 id 为 SelectItem 的是什么 html 元素?
我想不会是某个 checkbox 吧,更不可能是 n 个的checkbox.id= "SelectItem " ,那岂不乱套了
而且,看上面的代码,写此代码的coder并不确定每次返回的 SelectItem 对象是一个数组类型
【 if(SelectItem[0]!=null) 】

4。
Reuquest.Params[ "selectItem "]
==========
实际上,上面等价于 Request.Form[ "selectItem "],
地球人知道访问 Request.Form 应该使用客户端表单元素的 name,而不是 id

5。
于是乎问题1中的按钮(删除按钮)单击的后台事件中居然用 selectids=Reuquest.Params[ "selectItem "]
后续的代码就是以逗号来分割字符串从而得到一个字符串数组,而这个字符串数组就是checkbox被选中了的记录的id
===========
根据 4,我认为 selectItem 是这些 checkbox 共同享有的 name,
猜想下面的代码会得出什么值,
我们都知道,对于 checkbox 只有其 checked = true,浏览器才会将其 value 提交给服务器,
我们也知道,对于具有相同 name 的表单元素,浏览器会将其所有值用 , (逗号)连接,然后比较给服务器

<%@ Page Language= "C# " %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<script runat= "server ">

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) {
Response.Write(Request.Params[ "chk "]); // 1,3
}
}
</script>

<html xmlns= "http://www.w3.org/1999/xhtml " >
<head runat= "server ">
<title> Untitled Page </title>