发布没有 <form> 标签的表单有什么缺点吗

Are there any disadvantages to posting a form without the <form> tag

我正在尝试 $post 数据到 contact_form.php 而不是页面刷新或移动,除了我有一个 JS 函数告诉它的做。

有人会问我为什么要这样做。原因是我希望我的表单 post 没有页面休息或打开 contact_form.php.

所以我想尝试不使用 <form> 标签。只需使用 div

构建

我已经尝试了下面的所有解决方案。所有这些都会刷新页面。

  1. return=""
  2. target="_blank"
  3. Ajax
  4. JQ解决方案

JQ还在刷新页面

$(document).ready(function(){
   var $form = $('form');
   $form.submit(function(){
      $.post($(this).attr('action'), $(this).serialize(), function(response){
            // do something here on success
      },'json');
      return false;
   });
});

Ajax也刷新页面

$('#submit').click(function() {
    $.ajax({
        url: 'contact_form.php',
        type: 'POST',
        data: {
            email: 'email@example.com',
            message: 'hello world!'
        },
        success: function(msg) {
            alert('Email Sent');
        }               
    });
});

我也不希望此页面上有所有电子邮件代码。我希望能够参考 contact_form.php.

使用这样的方法有什么缺点吗?比如安全性、功能性,也许是移动版本问题等?

您只需要使用 event.preventDefault() 来停止表单提交的默认行为。

$('#submit').click(function(e) {
    // This will prevent page refresh
    e.preventDefault();
    $.ajax({
        url: 'contact_form.php',
        type: 'POST',
        data: {
            email: 'email@example.com',
            message: 'hello world!'
        },
        success: function(msg) {
            alert('Email Sent');
        }               
    });
});

不使用表单的实际缺点:

  1. 丑陋/糟糕DOM
  2. 您将无法使用 .submit
  3. .serialize() 将不起作用,因为您需要分别获取所有输入字段的值。
$('#submit').click(function(e) {
    e.preventDefault();
    $.ajax({
        url: 'contact_form.php',
        type: 'POST',
        data: {
            email: 'email@example.com',
            message: 'hello world!'
        },
        success: function(msg) {
            alert('Email Sent');
        }               
    });
});

你必须使用 preventDefault()