HTML / js.需要在一页上分别提交两种不同的表格

HTML / js. Need two different forms on one page submits separately

本文关键字:两种 提交 表格 js 一页 HTML      更新时间:2023-09-26

我找不到任何答案,然后问:

我在页面上有不同的表单:一个是"请求呼叫"(放置在网站的每个页面上),第二个是一个简单的"联系表单"(仅放置在联系页面上)。

都是没有问题的验证,它们是否在不同的页面上创建也很好。两者都有必需的字段。它们有不同的名称和id。

用户进入联系人页面时出现错误。有两种形式在一起。按订单联系方式为第一。当我使用它时,邮件发送。但是当我尝试用页面上的第二个表单发送呼叫请求时,它没有动作,因为第一个所需的表单没有填写或不匹配限制。

为什么第二个表单中的提交按钮从第一个表单中获取数据?

下面表格中有关于订单的联系页面和处理功能。

第一种形式(触点)

        <form id="message" name="contact_message" onsubmit="return false;" method="post">
        <div class="hover">
            <label for="message-name">Введите ваше имя:</label>
            <input id="message-name" name="name" type="text" placeholder="Имя" title="Пожалуйста, введите ваше имя." required>
        </div>
        <div class="hover">
            <label for="message-email">Введите ваш email адрес:</label>
            <input id="message-email" name="email" type="email" placeholder="xxx@xxx.xx" title="Пожалуйста, введите корректно ваш email." required>
        </div>
        <div class="hover">
            <label for="message-text">Введите ваше сообщение:</label>
            <textarea id="message-text" name="text" placeholder="Текст сообщения" title="Пожалуйста, введите текст сообщения. Минимум 9 символов." minlength="9" required></textarea>
        </div>
        <input type="hidden" name="type" value="contact_page">
        <button id="submit-contact" class="empty blue button medium" type="submit">Отправить</button>
        <div class="c-clearfix"></div>
    </form>
第二种形式
        <form id="call-ask-form" name="call-ask-form" class="full-width" onsubmit="return false;" method="post">
            <label for="phone-name">Ваше имя</label>
            <input id="phone-name" type="text" name="name" placeholder="Введите ваше имя" minlength="2" required>
            <label for="phone-phone">Ваш номер телефона (только цифры)</label>
            <input id="phone-phone" type="text" name="phone" placeholder="+41234567890" maxlength="16" required>
            <label for="phone-time">Время в формате ЧЧ:ММ, с 9 до 17 в будние дни, когда вы ожидаете звонок.</label>
            <input id="phone-time" type="text" name="text" placeholder="ЧЧ:ММ" maxlength="5">
            <input id="type" name="type" type="hidden" value="call_ask">
            <button form="call-ask-form" id="call-submit" class="filled green medium full-width button" type="submit">Отправить запрос</button>
        </form>

JS

这里,page_type变量每次在第二个表单上按submit时都从第一个表单获取数据。然后切换到CONTACT,但是CALL REQUEST。

$(document).ready(function() {
$("#submit, #call-submit").click(function() {
    var proceed = true;
    var page_type = $('input[name=type]').val();
    //validation
    if(proceed)
    {
        var form;
        //choosing type of a message
        switch (page_type) {
            case 'contact_page' :
                // preparing data from CONTACT form
                break;
            case 'call_ask' :
                // preparing data from CALL REQUEST form
                break;
            case 'calculator' :
                break;
            default :
        }
        // ajax post data
        $.post('/assets/components/mailer2.php', post_data, function(response){
            if(response.type == 'error'){ //load json data from server and output message
                output = '<div class="error" style="background-color: red; color: white;">' + response.text + '</div>';
            } else {
                output = '<div class="success" style="background-color: green; color: white;">' + response.text + '</div>';
            }
            $(form).append(output).slideDown();
        }, 'json');
    }
});

为什么会这样?请你帮忙。

$('input[name=type]').val();行中,这将始终尝试查找与整个页面的名称标准匹配的第一个输入的值。但是,请注意,两个表单的输入名称相同。

当多个元素具有相同的名称时,Javascript将不是很友好。相反,您需要重命名它们,或者确保您更好地引用您试图获取的内容:

下面的代码将为您提供正确的page_type:(请注意,在事件中,this将被设置为当前元素,在以下情况下将是<form />标记之一,您可以使用$(this).find(...)而不是$(...)来遍历它的子元素)

$('form').on('submit', function(e){
  var page_type = $(this).find('input[name=type]').val();
  alert(page_type);
  e.preventDefault();
})