我的代码遇到了问题。当用户单击单元格表时,应显示文本区域。单击时会显示文本区域,但它始终显示在第一个单元格上。我希望文本区域出现在单元格出现的确切位置。 (表中的值是从数据库中检索的)..
<?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'].", ";
echo $row['fname']." ";
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>
答案 0 :(得分: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>';
答案 1 :(得分:0)
我可以使用php值作为span和文本区域的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>