我有一些php代码,可从数据库中获取数据并将数据插入到引导数据表中,并且在一行中有一个显示模式的单元格。 单击该按钮时,它包含ID和带有我要在模式中显示的子内容的ID。
//#Example datatable
foreach($xx as $item) {
if($item) {
if ($item->state){
$id = $item->id;
$dname = $item->district_name;
$state = $item->state;
$city = $item->city;
$schools = $item->schools;
$students = $item->students;
global $stateId;
$stateId = $item->state_district_id;
}
}
echo ' <tr>
<td class="icon-class"></td>
<td align="center">' . $dname . '</td>
<td align="center">' . $state . '</td>
<td align="center">' . $city . ' </td>
<td align="center">' . $schools . '</td>
<td align="center">' . $students . '</td>
<td align="center">
<button onclick="myFunChild('. $stateId .')">View Schools</button>
</td>
<td align="center"><button onclick="myFunctionz(' . $id .')">Request District</button></td>
</tr>';
这是我的功能,我意识到我尚未使用传递的$ stateId做任何事情
function myFunChild(strg){
"use strict";
("#myModal").modal('show');
}
然后我有类似以下部分的代码:#Example datatable使用$ stateId从数据库中获取数据
但是很明显,它只需要设置第一个数据表后数据库给我的最后一个ID 我想做的是获取单击“查看学校”的特定行的当前/正确ID。
I.E。我正在将数据放入主数据表中,与此同时,我的子表也正在填充,但是我需要等到用户单击更多视图以使用正确的ID填充子表。
我该如何处理? 谢谢!
答案 0 :(得分:0)
您已正确将PHP变量传递给JS。只需使用strg
JS辩论者而不是$stateId
来引用它,它每次都是唯一的。您要在JS中显示的所有其他内容都需要作为JS函数的参数传递给JS。
重要的是要认识到PHP将只处理一次 。它是一种后端语言,可在完全不同的计算机上运行。 JS变量是客户端变量,可以在运行时更改,它们不知道PHP中发生了什么。示例:页面加载后,stateId已永久放置在页面中,并且不再可以作为变量访问。现在,对于客户端和JS来说,就好像它首先是硬编码一样。
所以您要做的是生成代码,例如:
<button onclick="showModal(1)">
<button onclick="showModal(2)">
<button onclick="showModal(3)">
这很好。
现在,由于JS不知道PHP是什么,或者不知道它是用来构建页面的,所以以上就是所见。按查看源以查看javascript看到的内容。像POST / GET这样的$ _REQUEST查询之外的任何东西都无法访问。
因此在JS中,您必须编写函数:
function showModal(id) {
alert("You clicked button " + id);
}
如果您尝试错误地写:
function showModal(id) {
alert("You clicked button " + $somePHPVariable);
}
然后按查看源代码,您将看到在JS代码甚至不知道发生了什么之前,您已经将此函数编写为alert("You clicked button " + 3);
。
因此,答案是您必须每次使用strg
中的myFunChild
创建唯一的对话框。
function myFunChild(strg){
"use strict";
("#myModal" + strg).modal('show');
}
对于要在此处传递的任何其他数据,它必须是另一个参数,一个数组,通过AJAX或URL #query传递的。某种程度上,在使用它之前必须使其成为JS可访问的。