【发布时间】:2016-04-20 22:11:53
【问题描述】:
我对 HTML 和 JavaScript 比较陌生,我目前正在修改一家公司的 osTicket。
我试图通过使用 JavaScript 延迟第二次提交来在同一页面中提交 2 个表单(我知道 HTML 不支持这一点),但我认为我的代码或思维方式有问题。
代码如下:
<script type="text/javascript">
function x() {
setTimeout(function() {
<?php // Just normal validation, checking if has administrator privileges or not
if(!defined('OSTSCPINC') || !$thisstaff || !$thisstaff->canEditTickets() || !$ticket) die('Access Denied');
$info=Format::htmlchars(($errors && $_POST)?$_POST:$ticket->getUpdateInfo());
if ($_POST)
$info['duedate'] = Format::date($cfg->getDateFormat(),
strtotime($info['duedate']));
echo '<form id="reply" action="tickets.php?id=' . $ticket->getId() . '#reply" name="reply1" method="post" enctype="multipart/form-data">';
csrf_token();
echo '<input type="hidden" name="do" value="update">'; // Fields that are mandatory for the form but don't want them to show
echo '<input type="hidden" name="a" value="edit">';
echo '<input type="hidden" name="id" value="' . $ticket->getId() . '">';
echo '<input type="hidden" name="user_id" id="user_id" value="' . $info['user_id'] . '">';
echo '<input type="hidden" name="source" value="' . $info['source'] . '">';
echo '<input type="hidden" name="topicId" value="' . $info['topicId'] . '">';
echo '<input type="hidden" name="slaId" value="' . $info['slaId'] . '">';
echo '</form>';?>
document.forms['reply1'].submit(); // The second form
}, 2000);
}
</script>
<form id="reply" action="tickets.php?id=<?php echo $ticket->getId();?>#reply" name="reply" method="post" enctype="multipart/form-data">
<!-- a lot of code that it is working properly -->
<input class="btn_sm" type='submit' value="<?php echo __('Post Reply');?>" onclick="x()">
</form>
PHP 中的第一个if 只是为了防止普通用户提交此表单,我以管理员权限登录。所有的 HTML 和 PHP 都是已经编写好的代码,应该可以正常工作(语法错误除外),我还通过单独提交每个表单进行了测试,并按预期工作。
此外,第一个表单正常提交,没有错误,但第二个表单似乎没有执行。我愿意改进代码并提出建议,谢谢!
【问题讨论】:
-
jQuery 可以使用吗?
-
为什么要使用 document.write() 一个 php echo?您可以直接在 html 中回显:。您可以使用 Ajax 提交不同的请求并在 javascript 中处理结果,或者如果您不需要多次交互,您可以简单地将表单变量分组到不同的数组中,然后使用 php 处理它们。
-
@YuriBlanc,它确实变得更容易理解了
-
理解起来并不容易,恰恰相反。出于此目的,
document.write()是一种不好的做法,也是一个坏主意。你可以用这句话完全崩溃你的应用程序。最好appendChild或innerHTML用javascript 绘画。但我认为@YuriBlanc 说的是你能做的最好的。 -
您创建一个作为服务器端逻辑的 php 脚本,并使用 ajax 请求来满足您的需求。因此,您也可以使用 json 并使您的 js 应用程序动态且易于维护。使用 php,您可以 json_encode/jsoc_decode 并且 json == 到 javascript 对象。
标签: javascript php html osticket