【问题标题】:Issues with form submit and preventDefault()表单提交和 preventDefault() 的问题
【发布时间】:2016-07-18 06:47:25
【问题描述】:

我已经搜索了几个小时,试图找到解决我遇到的问题的方法。我有一个外部 jQuery 页面来向服务器提交表单数据。我试过使用 event.preventDefault,然后返回 false;但这些似乎都不起作用。此外,如果我在函数的第一行添加警报,它不会出现。

这里是formL的jQuery代码和HTML代码

$(document).ready(function() {
//----------------------------------------------------Sign up------------------------------------------------------------------
$('#signup-form').on('submit', function(event) {
    alert("This is working");
    event.preventDefault();

    var subData = {
        'username'      : $('suser').val(),
        'password'      : $('spass').val()
    };

    $.ajax({
        type        : 'POST', //define the HTTP verb we want to use
        url         : 'createUser.php', // url where we want to post
        data        : subData, // our data object
        dataType    : 'json' //what type of data we expect back from the     server
        })
    });
});


<form id="signup-form" action="createUser.php" method="post">
        <input class="username" id="suser" type="text" name="username" placeholder="username" required><br>
        <input class="password" id="spass" type="text" name="password" placeholder="password" required><br>
        <input class="password" id="spassconf" type="text" name="password-confirm" placeholder="confirm password" required><br>
        <input id="signup-submit" type="submit" value="Signup">
</form>

我尝试过使用 .submit( 和 .on('submit',但似乎两者都不起作用。我很确定这是事件无法识别的问题,但我找不到适用的解决方案我。如果有帮助,我正在使用 chrome。

如果您需要任何其他代码,我很乐意提供。

编辑:按请求编写 PHP 代码

<?php

//get form fields into php variables
$username = $_POST['username'];
$password = $_POST['password'];

$serverName = "198.71.225.145";
$connectionInfo = array("Database"=>"Ironicism_database_project", "UID"=>"ironicism", "PWD"=>"Redhorsemagnet8*");

$conn = sqlsrv_connect($serverName, $connectionInfo);

if($conn===false) {
    echo "Connection could not be established.<br />";
    die( print_r( sqlsrv_errors(), true));
}

$sql = "INSERT INTO ironicism.users (username, password) VALUES ('$username', '$password')";


$stmt = sqlsrv_query( $conn, $sql);
if($stmt === false)
{
    echo "Data Could not be inserted.... working on that yo.<br />";
    die( print_r(sqlsrv_errors(), true));
}

?>

【问题讨论】:

  • 删除这个action="createUser.php" method="post"
  • event 是 JS 中的保留关键字。停止使用它作为变量。
  • 现有代码在Fiddle 中按预期工作,无需对代码进行任何更改...
  • @Mr_Green Ups.. 我的错.. 应该是一个标识符吗?根据this 和我长久以来的经验..

标签: javascript jquery forms


【解决方案1】:

在您的代码中,您定义了一个表单actionmethod 属性,它们足以处理提交操作。在这种情况下,您的表单提交后可能会刷新页面,因此您的 event.preventDefault() 无法正常工作。

从表单中删除表单actionmethod 属性并查看结果。

 $(document).ready(function() {
//----------------------------------------------------Sign up------------------------------------------------------------------
$('#signup-form').on('submit', function(event) {
    alert("This is working");
    event.preventDefault();

    var subData = {
        'username'      : $('suser').val(),
        'password'      : $('spass').val()
    };

    $.ajax({
        type        : 'POST', //define the HTTP verb we want to use
        url         : 'createUser.php', // url where we want to post
        data        : subData, // our data object
        dataType    : 'json' //what type of data we expect back from the     server
        })
    });
});


<form id="signup-form">
        <input class="username" id="suser" type="text" name="username" placeholder="username" required><br>
        <input class="password" id="spass" type="text" name="password" placeholder="password" required><br>
        <input class="password" id="spassconf" type="text" name="password-confirm" placeholder="confirm password" required><br>
        <input id="signup-submit" type="submit" value="Signup">
</form>

【讨论】:

  • 您在发布此答案之前是否测试了现有代码?
  • @Rayon 您是否需要对其进行测试,您似乎不喜欢并且明显的错误。顺便说一句,我将在哪里获得要测试的 php 文件。我写的答案是从我遇到类似问题的经验中学习的
  • 当OP说它不起作用时,无论他是否正确,都试一试..它也会让你意识到OP正在做的错误..Here是什么的小提琴OP 已共享并且工作正常。是什么让您认为它不起作用!我很惊讶...
  • @Rayon:OP 正在触发两个表单提交事件,并且由于它是异步请求,如何确定哪个请求首先触发。我会很感激你的回应。将进一步帮助我。是的,你的小提琴工作正常,我检查过了。
  • “OP 触发了两个表单提交事件” ?他们在哪 ?我复制了 OP 共享的相同代码...
【解决方案2】:

1) 如果您不想在提交点击事件时刷新页面,只需将按钮类型从提交更改为按钮即可:

<input id="signup-submit" type="button" value="Signup">

2) 从表单标签中移除动作值

3) 获取按钮点击事件而不是提交事件:

$('button').on('click', function(event) { // change it
    alert("This is working");
    event.preventDefault();

    var subData = {
        'username'      : $('suser').val(),
        'password'      : $('spass').val()
    };

    $.ajax({
        type        : 'POST', //define the HTTP verb we want to use
        url         : 'createUser.php', // url where we want to post
        data        : subData, // our data object
        dataType    : 'json' //what type of data we expect back from the     server
        })
    });
});

【讨论】:

  • 哦哇...我觉得自己像个白痴,我没有尝试过。非常感谢您的及时回复。一旦计时器到了,我会将其标记为正确答案。
  • @Ironicism 欢迎... :) 如果解决了问题,请将其标记为正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
相关资源
最近更新 更多