【发布时间】:2014-11-13 13:58:45
【问题描述】:
我有一个“查询构建器”页面 (querybuilder.php),它允许用户构建 SQL 查询然后执行它。所有这些都可以正常工作。
查询的参数被发布到另一个 PHP 页面 (queryresults.php),该页面运行存储的过程,然后循环遍历结果以创建插入到 querybuilder.php 的表。该循环在每一行都包含一个复选框,其值设置为每条输出记录的 ID。
Queryresults.php(innerHTML 页面)也有一些下拉菜单,允许用户对已“检查”的行执行某些操作。我在 Javascript 之外创建了一个循环,为每个连续的复选框执行一次。
据我了解 - 我不能在 innerHTML 页面中包含脚本标签,但我需要与仅在加载 innerHTML 时创建并分配值的复选框进行交互。
我查看了一些解决方法,包括以下内容:http://24ways.org/2005/have-your-dom-and-script-it-too,但似乎都不起作用。
$checkboxes = isset($_POST['checkbox']) ? $_POST['checkbox'] : array();
foreach($checkboxes as $value) {
echo "
<script>
$('#doAction').on('click', function() {
var id = ".$value.";
var u = document.getElementById('user').value;
$.ajax({
type: \"POST\",
url: \"storedprocs.php\",
data: { id: id, u: user }
})
.done(function(msg) {
document.getElementById('done').innerHTML=msg;
});
});
</script>";
}
来自 innerHTML 页面的最终 HTML 如下所示:
echo "
<div class="row">
<div class="col-md-6">
<select id="user" class="input-sm">
<option value="1">User 1</option>
<option value="2">User 2</option>
<option value="3">User 3</option>
</select>
</div>
<div class="col-md-3">
<button class="btn" id="doAction" data-stmt="false">Submit</button>
</div>
</div>
<div class="row">
<div class="leTable">
<table class="table-hover table-responsive">
<tr class="heading">';
echo $tableheaders;
echo '</tr>';
foreach($result as $row) {
echo '<tr>
<td><input type="checkbox" name="chkbox" id="idChkBox"><a href="otherpage.php?id='.$row[0].'" value="'.$row[0].'">'.$row[0].'</a></td>';
for ($x=1; $x<sizeof($row); $x++) {
echo '<td>'.$row[$x].'</td>';
}
echo '</tr>';
}
echo '</table>';
echo '</div></div>';
为了使问题更加复杂,第二个变量来自的 id=user 元素是由另一个完全独立的 innerHTML 设置的,所以我也不知道如何引用它。
真正令人头疼的问题,我在 Google 上进行了广泛的搜索,并通过 StackExchange 进行了搜索,但无济于事。任何帮助将不胜感激!
谢谢!
【问题讨论】:
-
你能发布你期望完成的 html 的样子吗?您只需要 1 个 Javascript 块来处理所有元素的事件,而不是每个 1 个块。另外,不要忘记元素 ID 必须是唯一的。
-
jQuery 仅在页面运行时才知道页面中的元素,因此添加到 DOM 的新元素无法被 jQuery 识别。为了解决这个问题,使用event delegation,将新添加的项目中的事件冒泡直到 jQuery 在页面加载时运行时所在的 DOM 中的某个点。许多人使用
document作为捕捉冒泡事件的地方,但没有必要在 DOM 树上爬那么高。理想情况下you should delegate to the nearest parent that exists at the time of page load. -
Archer - 我现在已经编辑以包含完成的 html。你的意思是我只需要一个 javascript 块?
-
Jay - 谢谢,正在阅读,看起来很有帮助!
标签: javascript php jquery ajax innerhtml