1

我的代码有问题。当用户单击单元格表时,应出现文本区域。单击时会出现文本区域,但它始终出现在第一个单元格上。我希望文本区域恰好出现在单元格出现的位置。(表中的值是从数据库中检索的)..

<?php
session_start();

if(!isset($_SESSION['key']))
{
    header("location:index.php");   
}

    include"connect.php";?>
   <html>
    <head>
       <title>All Records</title>   
       <style>
        table{ text-align:justified;}
        a {text-decoration:none;
           color:black;
        }
        .replace {display:none;}
   </style>
   <script type="text/javascript">
       function exchange(el){
        var ie=document.all&&!document.getElementById? document.all : 0;
        var toObjId=/b$/.test(el.id)? el.id.replace(/b$/,'') : el.id+'b';
        var toObj=ie? ie[toObjId] : document.getElementById(toObjId);

        if(/b$/.test(el.id))  
        toObj.innerHTML=el.value;
        else{
        toObj.style.width=el.offsetWidth+7+'px';
        toObj.value=el.innerHTML;
        }
        el.style.display='none';
        toObj.style.display='inline';
        }
      </script>
</head>
   <body>


   <?php 
     echo "<table border=1 id='records' >";
     echo "<tr><th class='data' rowspan='2' ><strong>EMPLOYEE</strong></th>";
     echo "<th class='data' rowspan='2'>DATE</th>
                <th colspan='2'>AM</th>
                <th colspan='2'>PM</th>
                <th colspan='2'>OVERTIME</th></tr>";
     echo "<tr>
        <th>Arrival</th>
        <th>Departure</th>  
        <th>Arrival</th>
        <th>Departure</th>
        <th>In</th>
        <th>Out</th>
       </tr>";


   $query="SELECT 
   employee_detail.employee_code,
   employee_detail.lname,
   employee_detail.fname,
   employee_detail.mname,
   employee_record.date,
   employee_record.am_in,
   employee_record.am_out,
   employee_record.pm_in,
   employee_record.pm_out,
   employee_record.over_in,
   employee_record.over_out
   FROM employee_detail INNER JOIN employee_record ON
   employee_record.employee_code=employee_detail.employee_code ORDER BY id DESC ";

   $result=mysql_query($query);
   $affected=mysql_affected_rows();

   while($affected>=1&&$row=mysql_fetch_array($result))
   {
     echo '<tr><td><a href="edit.php?id2='.$row['employee_code'].'" name="edit">';
     echo $row['lname'].",&nbsp";
     echo $row['fname']."&nbsp";
     echo $row['mname']."</a></td>"; 
     echo '<td>'.$row['date'].'</td>';
     echo '<td><span id="itm1" onclick="exchange(this);">'.$row['am_in'].'</span>                  
     <textarea ondblclick="exchange(this);" id="itm1b" class="replace" type="text" 
     value='.$row['am_in'].'></textarea></td>';
     echo '<td>'.$row['am_out'].'</td>';
     echo '<td>'.$row['pm_in'].'</td>';
     echo '<td>'.$row['pm_out'].'</td>';
     echo '<td>'.$row['over_in'].'</td>';
     echo '<td>'.$row['over_out'].'</td>';
     $affected--;
   }     
     echo "</tr></table>";
   ?>

   </body>
   </html>
4

2 回答 2

0

第一个<textarea>总是出现的事实使您的代码听起来好像运行正常,但是由于您正在生成具有相同id属性的多个元素,它的目标是第一个匹配的元素,而不是您单击的最近的元素。

通过附加结果的 'employee_code' 值(可能是数据库中的主键)使每个id唯一(这实际上是有效性的要求):


    echo '<td>';

    echo   '<span id="itm"' . $row['employee_code'] . '" ';
    echo   'onclick="exchange(this);">';
    echo   $row['am_in'];
    echo   '</span>';

    echo   '<textarea ondblclick="exchange(this);" id="itm';
    echo   $row['employee_code'] . 'b" class="replace" type="text" ';
    echo   'value=' . $row['am_in'] . '>';
    echo   '</textarea>'

    echo '</td>';

于 2012-10-22T03:58:45.180 回答
0

我可以使用 php 值作为跨度和文本区域的 id 吗?

  echo '<td>';
  echo   '<span id='.$row['employee_code'] . ' onclick="exchange(this);">'.$row['am_in'].'</span>';
  echo '<textarea ondblclick="exchange(this);" id='.$row['employee_code']. ' class="replace" type="text" value=' . $row['am_in'] .' >'. $row['am_in'] . '</textarea>';
  echo '</td>
于 2012-10-22T05:40:18.243 回答