对
PHP很满意,但与jQuery竞争。我有一个用于编辑项目的引导模式,并且我在单击编辑按钮时使用 AJAX 填充字段。这很好用,但一个项目可以在多个部门中(模式中的复选框)
这就是我填充模态的方式:
$.ajax({
url: 'project_tasks.php?task=select_project&pjct_id=' + id,
method: 'GET',
dataType: 'json'
}).success(function(response) {
// Populate the form fields with the data returned from server
$('#edit_project')
.find('[name="project_id"]').val(response.project_id).end()
.find('[name="project_title"]').val(response.project_title).end()
.find('[name="project_bgcolor"]').val(response.project_bgcolor).end()
.find('[name="project_desc"]').val(response.project_desc).end()
.find(':checkbox[name^="department"]').each(function () {
if($(this).val() == response.dpmt_id) {
console.log("depart: " + response.dpmt_id);
$(this).prop('checked', true);
}
});
});
PHP 是(还没有转义,但会做):
$pjct_id = $_GET['pjct_id'];
$pjct = Projects::find_by_id($pjct_id);
$dpmts = Projects_departments::find_all_by_pjct_id($pjct_id);
foreach ($dpmts as $dpmt) {
$response_array['dpmt'] = $dpmt->department_id;
}
$response_array['project_id'] .= $pjct->id;
$response_array['project_title'] .= $pjct->project_title;
$response_array['project_bgcolor'] .= $pjct->project_bgcolor;
$response_array['project_desc'] .= $pjct->project_desc;
echo json_encode($response_array);
显然,我知道"dpmt"每次都会被覆盖,所以我只获得 json dpmt : 1
而不是每个部门 ID,但我想实现类似 dpmt: 1, dpmt: 2, dpmt: 3
的东西,然后循环通过它勾选复选框。
希望我已经很好地解释了自己(妻子赶我出去)提前谢谢。
PHP : 返回一个 id 数组而不是整数/字符串。
...
foreach ($dpmts as $dpmt) {
$response_array['dpmt'][] = $dpmt->department_id;
}
...
Javascript:使用组合选择器,因此您不必循环每个复选框。仅在 PHP 返回的dpmt_ids上使用该循环。
$('#edit_project')
.find('[name="project_id"]').val(response.project_id).end()
.find('[name="project_title"]').val(response.project_title).end()
.find('[name="project_bgcolor"]').val(response.project_bgcolor).end()
.find('[name="project_desc"]').val(response.project_desc).end()
;
for (i=0; i< response.dpmt_id.length; ++i) {
$('#edit_project').find(':checkbox[name="department[]"][value="'+response.dpmt_id[i]+'"]').prop('checked',true);
}