如何防止在每次页面加载时执行此jQuery函数?

时间:2013-06-27 05:40:16

标签: jquery forms post onsubmit

我相信我能解决问题,但我想确定一下。这就是我所拥有的:

<html>...
<body>...

 <script type="text/javascript" src="../JS/jquery.js"></script>
 <script type="text/javascript" src="../JS/respond.min.js"></script>
 <script type="text/javascript" src="../JS/jquery.min.js"></script>
 <script type="text/javascript" src="../JS/validate.js"></script>
 <script type="text/javascript" src="../JS/jQueryCalls.js"></script>
 ...

<form name="login-form" class="login-form" method="post" onSubmit="login()">

  <div class="header">
    <h1>Sign In</h1>
  </div>

  <div class="content">
    <input type="hidden" name="siteToken" value="$token" />
    <input id="username" name="username" type="text" class="input username"  placeholder="Username" required="required" />

  <div class="user-icon"></div>
    <input id="password" name="password" type="password" class="input password" placeholder="Password" required="required" />

  <div class="pass-icon"></div>

  </div>

  <div class="footer">
    <input type="submit" name="submit" value="Login" class="button" />
  </div>
</form>

现在{jQuery函数的onSubmit链接是一个外部文件jQueryCalls.js。这是功能:

$(function login() {
    var formData = $('#login-form').serialize(); //Grab all submission data from login form
    $("input").prop("disabled", true); //Disable inputs for the duration of the post

    var request = $.post('E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_LoginProcess.php', formData, loginMessage);

    //Handle server-side response
    function loginMessage(data) {
        $('.header').append("nada");
    };

});

每次加载页面时,都会执行此功能 - 这显然会因为禁用输入而产生问题。我的假设是我可以解决这个问题:

$(document).ready(function login() {
  $('.login-form').submit(function() {
   var formData = $(this).serialize();
   .post('whatever', formData,...

我很好奇是否有人对此有任何见解,以及为什么在每个页面加载时执行它?具体来说,我是否需要修改表单操作属性,onSubmit上的不同实现等?我假设浏览器只是看到文件并执行包含函数。另外,我在chrome控制台中收到了交叉原点错误。 php文件是否需要与jQuery函数位于同一目录中?任何输入都表示赞赏。

1 个答案:

答案 0 :(得分:4)

关键在于:

$(function login() {
});

请记住,jQuery不是一种不同的语言 - 它只是javascript,已经定义了一些辅助函数。因此,您正在调用$()函数,并将函数作为参数传递。您命名该函数的事实是无关紧要的 - 它仍然作为参数传递给$()

当您调用$()jQuery()函数并传入另一个函数时,它是定义文档就绪事件处理程序的快捷方式。因此,您的代码实际上与执行此操作相同:

$(document).ready(function() {
    var formData = $('#login-form').serialize();
    $("input").prop("disabled", true);
    // the rest of your function here...
});

...导致它在每个页面加载时运行。

如果您只是定义稍后将调用的函数,则没有理由将其包装在$()中。您可以这样定义您的函数:

function login() {
    var formData = $('#login-form').serialize();
    $("input").prop("disabled", true);
    // the rest of your function here...
}