【问题标题】:jquery onsubmit return false not workingjquery onsubmit 返回 false 不工作
【发布时间】:2016-02-11 08:31:58
【问题描述】:

我正在尝试使用 onsubmit 在 script.js 上返回 false 来验证防止 index.php 表单重定向到 login.php。 script.js 文件从 login.php 获取 ajax 响应。但是 onsubmit return false 不起作用。这是代码

索引 php 文件

<html>
<head>
<title>Untitled Document</title>

<script src="jquery-1.8.0.min.js" type="text/javascript"></script>
<script src="script.js" type="text/javascript"></script>
</head>

<body>
<form id="myForm"   action="login.php" method="POST">
Username:<input type="text"  id="username" name="username"><br  />

Password:<input type="password"  id="password" name="password"><br  />
<button id="submit">Login</button>

</form>
<div id="ack"></div>

</body>
</html>

登录php文件

<?php 
include("dbcon.php");
$username = mysql_real_escape_string($_POST["username"]);
$password = mysql_real_escape_string(md5($_POST["password"]));

$sql = "select count(*) from users WHERE username='$username' 
AND password='$password '";
$res= mysql_query($sql);
$row =  mysql_fetch_array($res);

if( $row[0] >0 )
echo "login successful";
else
echo "login failed";
?>

脚本js文件

$("button#submit").click( function(){
    if( $("#username").val()=="" || $("#password").val()=="")

    $("div#ack").html("Please enter username and password");
    else
    $.post( $("#myForm").attr("action"),//attribute eg login.php
    $("#myForm :input").serializeArray(),//break data into key value pairs
               function(data){//catch daat from login.php eg login failed or login                                      
                $("div#ack").html(data);    
    });

    $("#myForm").submit( function(){
        });
return false;

    });

我们将不胜感激任何形式的帮助

【问题讨论】:

  • 任何控制台错误?
  • 您是否将代码包装在文档就绪处理程序中?顺便说一句,您不是从提交处理程序(嵌套在单击处理程序中)返回 false,而是从按钮的单击事件返回。但是由于默认提交按钮的点击事件是在表单提交时触发的,所以这里不是问题。

标签: jquery


【解决方案1】:

您可以在点击事件中使用 preventDefault 功能。

$("button#submit").click( function(event){
if( $("#username").val()=="" || $("#password").val()=="")

$("div#ack").html("Please enter username and password");
else
$.post( $("#myForm").attr("action"),//attribute eg login.php
$("#myForm :input").serializeArray(),//break data into key value pairs
           function(data){//catch daat from login.php eg login failed or login                                      
            $("div#ack").html(data);    
});
event.preventDefault();
return false; 
});

【讨论】:

  • 欢迎对问题所在和您所做的更改进行一些描述。
  • 我试过这个代码$("#myForm").submit( function(e){e.preventDefault(); if( $("#username").val()=="" || ("#password").val()==""){ $("div#ack").html("Please enter username and password");} else { $.post(this.action, $(this).find(':input').serializeArray(), function(data) { $("div#ack").html(data); }); } });。它仍在提交到登录页面,php或jquery中没有错误。我还尝试通过添加.click(function(event) 然后在return false; 之前调用event.preventDefault(); 来修改我的代码,目前根本没有改善
  • 嗯,有些东西不对……试试这个代码。 $("#myForm").on('submit', function(e){ if ( $("#username").val()=="" || ("#password").val()== "") { $("div#ack").html("请输入用户名和密码"); } else { $.post( this.action, $(this).find(':input').serializeArray( ), function(data) { $("div#ack").html(data); }); } e.preventDefault(); });
【解决方案2】:

要实现您的要求,您需要挂钩到form 元素的submit 事件,并使用event.preventDefault() 停止它。试试这个:

$("#myForm").submit(function(e) {
    e.preventDefault();
    if ($("#username").val() == "" || $("#password").val() == "") {
        $("div#ack").html("Please enter username and password");
    }
    else {
        $.post(this.action, $(this).find(':input').serializeArray(), function(data) {           
            $("div#ack").html(data);    
        });
    }
});

【讨论】:

  • 没有错误,index.php 的行为就像 jquery 不存在
  • 你是对的。当代码格式正确时,大括号确实匹配。但是解决方法是一样的。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多