【问题标题】:Change cell table into text box when clicked单击时将单元格表更改为文本框
【发布时间】:2012-10-11 20:17:34
【问题描述】:

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

<?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>

【问题讨论】:

    标签: javascript html-table onclick


    【解决方案1】:

    我可以使用 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>
    

    【讨论】:

      【解决方案2】:

      第一个&lt;textarea&gt; 总是出现的事实使您的代码听起来好像运行正常,但是因为您正在生成具有相同id 属性的多个元素,它的目标是第一个匹配元素而不是离您最近的点击位置。

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

      
          echo '<td&gt';
      
          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>';
      
      

      【讨论】:

      • @user1758736 RE:您在下方的“答案” - id 属性必须以字母开头:link
      • 对不起...我还有一个问题,我可以将 php 值传递给一个变量,然后将该变量分配为 span 和 textarea 的 id 吗?感谢您回答我的问题...
      • 上述代码块中的第 2 行和第 6-7 行应分别导致元素 ids 为 "itm1234" 和 "itm1234b",其中 employee_code 为 "1234"。不需要将 php 值传递给单独的变量,因为您直接输出 HTML 标记。如果您希望使用其他一些值,只需将这两个位置中的 $row['employee_code'] 替换为您要使用的变量的名称即可。
      • 我尝试添加您提供的代码,但我没有得到任何结果..单击后单元格不会变为文本区域..您能告诉我为什么吗? (对不起,如果我很烦人..我自己也很烦^^,)
      • 我已经尝试了另一种方法,但我也遇到了麻烦。你能看看吗?谢谢link
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多