你真的想要的不是将视觉数据存储在您的表格中,但也包含某种元数据。有几种方法可以实现这一点。
方法1:(AB)使用id
或class
属性:
产生的HTML应该是这样的:
<!-- example with the id-attribute: -->
<tr id="mysql_row_1"> ... </tr>
<tr id="mysql_row_2"> ... </tr>
<!-- example with the class-attribute: -->
<tr class="mysql_row_1"> ... </tr>
<tr class="mysql_row_2"> ... </tr>
这样既能产生有效的HTML,但你会滥用属性 - 他们没有实现的目标 - 通常被认为是不好的。想象一下,如果你不得不存储更多的价值。你可以分配多个类,但是你会遇到id-tag。因此:不要这样做!
你不得不改变你这样的代码来实现这个解决方案:(我假设你想为ROWNUMBER的$x
值)
while ($row=mysqli_fetch_assoc($search) and $row1=mysqli_fetch_assoc($search1)) {
echo '<tr class="mysql_row_'.$x.'" onclick="getRowNumber()">';
echo "<td>".$x."</td>";
echo "<td>".$row['location']."</td>";
echo "<td>".$row1['fare']."</td>";
echo "</tr>";
$x++;
}
JavaScript部分:
function getRowNumber() {
var rowNumber = this.className.replace("mysql_row_",""); // fetches the classname and removes the extra-strings
alert(rowNumber); // alerts "1", "2", ...
}
方法2:使用data-*
属性:
这soluti on对HTML5有效。 如果您有一些,请添加有关兼容性的其他信息。
你的HTML代码如下所示:
<tr data-mysql_row_number="1" onclick="getRowNumber()"> .... </tr>
<tr data-mysql_row_number="2" onclick="getRowNumber()"> .... </tr>
而修改的javascript:
function getRowNumber() {
alert(this.getAttribute("data-mysql_row_number")); // alerts "1", "2", ...
}
这也产生完全有效的HTML(5)代码,并可以存储无限无尽的金额信息,因为您可以指定尽可能多的data-*
属性。
方法#3:使用隐形<input>
字段:
产生的HTML代码:
<tr onclick="getRowNumber()">
<td>
Normal content of this field
<input type="hidden" name="mysql_row_number" value="1"/>
</td>
</tr>
而JS代码来获取值:
function getRowNumber() {
var rowNumber = this.getElementsByName('mysql_row_number')[0].value;
alert(rowNumber); // alerts "1", "2", ...
}
这也会产生有效的HTML,但在我看来语义上并不正确,因为<input>
字段中的数据是一种松散的,不直接连接到行。另外,您可以制作多个名称相同的<input>
字段。
- 我会建议方法#2(
data-*
),因为这是最灵活的解决方案,并使用一个专门用于存储元数据的属性。
- 方法1将在所有(较旧的)浏览器中工作最可靠,因为只要您保持
id
标记的唯一性,它们都可以通过JS支持对id
或class
属性的访问。方法#3在旧版浏览器中也相当可靠。
所以你的实际问题是?... – akluth
你仍然需要PHP来检索MySQL值。你可以使用jQuery来点击显示他们 – verbumSapienti