【问题标题】:Submitting multiple forms in HTML with JavaScript使用 JavaScript 在 HTML 中提交多个表单
【发布时间】: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() 是一种不好的做法,也是一个坏主意。你可以用这句话完全崩溃你的应用程序。最好appendChildinnerHTML 用javascript 绘画。但我认为@YuriBlanc 说的是你能做的最好的。
  • 您创建一个作为服务器端逻辑的 php 脚本,并使用 ajax 请求来满足您的需求。因此,您也可以使用 json 并使您的 js 应用程序动态且易于维护。使用 php,您可以 json_encode/jsoc_decode 并且 json == 到 javascript 对象。

标签: javascript php html osticket


【解决方案1】:

在 jQuery 中

$('form').submit(function(e){ // on a form submit
    e.preventDefault(); //do not submit
    serializedData = $("form").serialize(); //serialise all forms to JSON
    $.ajax({
        type: "POST",
        url: tickets.php,
        data: serializedData,
        success: function(){
            // do on success
        },
        dataType: json
    });
});

没有:

var request = new XMLHttpRequest();
request.open('POST', 'tickets.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
var forms = document.getElementsByTagName('form');
var data = JSON.stringify([].slice.call(forms));
request.send(data);

【讨论】:

  • Uncaught TypeError: forms.serialize is not a function(…)
  • 因为serialize()是一个jQuery函数!
  • 哎呀,你可以用这个:stackoverflow.com/questions/1184624/…
  • @Thomas,基于链接,我的问题不会一样吗?即使将表单更改为 JS 对象或其他形式,它也会作为表单发送,并且无法同时进行两个处理,对吧?
  • 不,因为您将所有表单的数据放入数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多