动态分页表格中循环创建checkbox按钮(导致checkbox名称一样),要求实现功能选定一行中的checkbox时候知道选定的是哪一行,然后将cgid传递到一个变量中去。
根据这个cgid进行数据库操作。
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>物资入库</title>
<script language='javascript'>
function sendRequest(){
var a=document.getElementById('chkRefId').value;
alert(a);
}
</script>
<style type="text/css">
<!--
.STYLE1 {
font-family: "汉仪雪君体简";
font-size: 30px;
color: #CC3300;
}
.STYLE2{
font-family: "汉仪雪君体简";
font-size: 20px;
color: #CC3300;
}
.STYLE3{
font-family: "汉仪雪君体简";
font-size: 10px;
color: #CC3300;
}
-->
</style>
</head><body>
<table width="1000"  height="512" border="0" align="center">
  <tr>
    <td height="100" align="center" class="STYLE1">入库</td>
  </tr>
  <tr align="center">
    <td height="300"  valign="top" align="center">
<table width="856" align="center">
      <tr bgcolor="#FF9933" align="center">
        <td width="150" height="30" align="center">计划单号</td>
        <td width="150" align="center">时间</td>
        <td width="120" align="center">物资名称</td>
<td width="120" align="center">采购部门</td>
        <td width="120" align="center">采购数量</td>
        <td width="120" align="center">采购人</td>
        <td width="50" align="center"></td>
      </tr>
<?php 
$conn = mssql_connect("(local)","sa","123456"); //链接SQL SERVER 
$dbname = mssql_select_db("wzgl") or die("数据库不存在或不可用".mssql_error()); //选择数据库 
$sql = "select * from cg where wc=0 order by cgid desc";
$result = mssql_query($sql);
$result1 = mssql_query($sql);
$count=0;
if(!$rs1=mssql_fetch_array($result1)){
echo "<script>alert('非常抱歉没有未完成的计划单')</script>";
}
else{
while($rs=mssql_fetch_array($result)){
$count++;
}
}
$pageSize=5;
if($_REQUEST['page']){
$page=$_REQUEST['page'];
if($count>0)//如果总记录数大于0 

if($count<$pageSize) {$pageCount=1;}//总页数为1
if($count%$pageSize==0){ $pageCount=$count/$pageSize;}//获取它们相除的商,作为总页数  
else{ $pageCount=intval($count/$pageSize)+1;}//获取它们相除的商,取其整数部分再加1,作为总页数
$offset=$pageSize*($page-1);
$sql = "select top ".$pageSize."* from rk where cgid not in (select top ".$offset."cgid  from  rk order by cgid desc )order by cgid desc";
$result = mssql_query($sql); 
while($rs=mssql_fetch_array($result)){
?>
<tr bgcolor="#CCCCCC">
  <td width="120" align="center">
  <?php echo $rs['cgid']; ?></td>
      <td width="180" align="center">
  <?php echo $rs['cgtime'];?></td>
  <td width="120" align="center">
  <?php echo $rs['wzname']; ?></td>
      <td width="120" align="center">
  <?php echo $rs['bm'];?></td>
  <td width="120" align="center">
  <?php echo $rs['cgsl']; ?></td>
  <td width="120" align="center">
  <?php echo $rs['cgname']; ?></td>
  <td width="50" align="center"><input name="chkRefId" type="checkbox"  onclick="sendRequest();" value="<?php echo $rs['cgid']?>"/></td>
  </tr>
  <?php
  }
  }
  }
?>
<tr>
        <td height="50" colspan="8" bgcolor="#FFFFFF">
<div align="center" > 共 <b>
<?php echo $count ;?>
</b> 计划单, 页次: <b><font color=red>
<?php 
echo $_REQUEST['page'];
?>
</font>/
<?php echo $pageCount;?>
</b>
<?php 
if($_REQUEST['page']==1){
echo '<a href="rk.php?page='.($page+1).'">下一页</a>';}
else if($_REQUEST['page']==$pageCount) 
{echo '<a href="rk.php?page='.($page-1).'"> 上一页</a>';} 
else if($_REQUEST['page']<$pageCount&&$_REQUEST['page']>1){
echo '<a href="rk.php?page='.($page+1).'"> 上一页</a>';
echo '<a href="rk.php?page='.($page-1).'"> 下一页</a>';}
?></div>   </td>
      </tr>
    </table>
</td>
  </tr>
</table>
</body>
</html>
现在有2个问题:1.上面Javascript为测试用,但是得到始终是第一个checkbox的值;
               2.我现在有2个方案 
                       1是在本页面中判断哪个checkbox被选定并得到cgid的值,那么在什么地方触发checkbox的事件,因为还有1个确定按钮没有做,当单击确定按钮的时候根据cgid的值传送到PHP服务器端进行数据库操作,使用URL变量传递。
                       2是在选定的时候什么也不再,然后在提交的时候在服务器根据checkbox的check属性,得到其value值进行数据库操作。
                       哪一个方案好一点?具体怎么实现。
谢谢了,问题好像很多,就多给点分! 

解决方案 »

  1.   

    getElementById只能取得一个值,如果用getElementsByName的话也需要指定的,所以,还不如为每个checkbox指定不同的id名字。
    又及,input的id和name在ie中有个小bug,所以两个都写比较好 = =<input name="chkRefId<?php echo $rs['cgid']; ?>" id="chkRefId<?php echo $rs['cgid']; ?>" type="checkbox" onclick="var a= document.getElementById('chkRefId<?php echo $rs['cgid']; ?>').value; 
    alert(a);" value<?php echo $rs['cgid']?>"/>
      

  2.   

    这种设计数据库的操作还是少用URL变量为好…
    楼主是想选中那一个,就提交那个;还是说只要是checkbox=ture的全部都提交?
    唔…还想提醒一下,上面写的不小心少打了个等号和引号 = =||
      

  3.   

    2楼说的我也想过,给每一个checkbox赋值以后在JavaScript中并不能知道哪个被选定了,有可能选定多个也有可能选定一个,甚至是全选。难道需要用checkbox的check属性进行判断?这个函数怎么用啊?如果不用JS的话在PHP中跨页面传客户端的checkbox的check属性可行么?用什么变量传?3楼说URL变量不好。
      

  4.   

    还有onchick事件是在点一下啊就触发,不管选定还是取消选定
      

  5.   

    当然是选择2方案.
    用jquery实现起来比较简单.如果有一个被选中,就让button变可用.如果没有被选中,button是禁用的.
    至于提交,可以用form提交,也可以用ajax获取checkbox是否选中来提交.jQuery(function($){
       $(".tomt").each(function(){
          $(this).change(function(){
             if(this.checked && $('#StartMT').attr('disabled'))
             {
               $('#StartMT').attr('disabled', false);
               return;
             }         if(!this.checked && !$('#StartMT').attr('disabled'))
             {
                var flag = true;
                $("#list .tomt").each(function(){
                   if(this.checked)
                   {
                     flag = false;
                     return false;
                   }
                });
                $('#StartMT').attr('disabled', flag);
                return;
             }
          });//change
       });//list .tomt   $('#StartMT').click(function(){
         if(confirm("Do you want to change those ips's status to 'Awaiting_MT'?"))
           $("form")[0].submit();
       });
     });<form name='ttt' method='post' action=''>
    <input type='button' name='StartMT' id='StartMT'  disabled value='StartToMT'/><input class='tomt' type='checkbox' name='mt[]' value='12'/>
    <input class='tomt' type='checkbox' name='mt[]' value='11'/>
    <input class='tomt' type='checkbox' name='mt[]' value='13'/>
    </form>
      

  6.   

    问题已经解决 我采用的是ajax:<input name="chkRefId<?php echo $rs['cgid']?>" id="chkRefId<?php echo $rs['cgid']?>" type="checkbox"  onclick="sendRequest(document.getElementById('chkRefId<?php echo $rs['cgid']?>').value,document.getElementById('chkRefId<?php echo $rs['cgid']?>').checked);" value="<?php echo $rs['cgid']?>"/>将是否选定值和cgid的值传递到javascript<script language='javascript'>
    var xmlHttp;
    function sendRequest(cgid,a){
    if(a==true){
    createXMLHTTP();
    var url="response1.php?cgid="+cgid;
    xmlHttp.open("GET",url,true);
    xmlHttp.onreadystatechange=updatesl;
    xmlHttp.send(null);
    }}
    function createXMLHTTP(){
      if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}
      else if(window.ActiveXObject){
       try{
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){}
    try{
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){}
    if(!xmlHttp){
    window.alert("不能创建XMLHttpRequest对象实例");
    return false;
    }
      }
    }
    function updatesl(){
    if(xmlHttp.readyState==4){
    if(xmlHttp.status==200){
    if(xmlHttp.responseText){
    alert("入库成功");
    location.href='rk.php?page=1';
    }
    else{
    alert("入库失败");
    location.href='rk.php?page=1';
    }
    }
    }
    }
    </script>通过url="response1.php?cgid="+cgid;将cgid的值传递到response1.php中执行:<?php
    $conn = mssql_connect("(local)","sa","123456"); //链接SQL SERVER 
    $dbname = mssql_select_db("wzgl") or die("数据库不存在或不可用".mssql_error()); //选择数据库
    $cgid=$_REQUEST['cgid'];
    $sql1="select * from rk where cgid='".$cgid."'";
    $result1=mssql_query($sql1);
    $rs1=mssql_fetch_array($result1);
    if($rs1){
    $cgsl=$rs1['cgsl'];
    $wzname=$rs1['wzname'];
    }
    $sql2="update cg set wc=1 where cgid='".$cgid."'";
    $result2=mssql_query($sql2);
    $sql3="select * from wzkc where wzname='".$wzname."'";
    $result3=mssql_query($sql3);
    $rs3=mssql_fetch_array($result3);
    if($rs3){
    $kcsl1=$rs3['kcsl1'];
    }
    $cgsl1=$cgsl+$kcsl1;
    $sql4="update wzkc set kcsl1 =".$cgsl1." where wzname ='".$wzname."'";
    $result4=mssql_query($sql4);
    echo "true";
    ?>这样实现了无页面跳转的刷新数据项了