How can I prevent this jQuery function from being executed on every page load?

坚强是说给别人听的谎言 提交于 2019-12-04 02:06:33

问题


I believe I have a solution to my problem, but I want to be sure. This is what I have:

<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>

Now onSubmit links to a jQuery function is an external file, jQueryCalls.js. This is the function:

$(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");
    };

});

Every time the page loads, this function is executed - obviously that creates an issue since I disable inputs. My assumption is that I can fix the problem with something like this:

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

I am curious as to whether anyone has any insight on this, and why it is being executed on each page load? Specifically, do I need to modify form action attribute, different implementation on onSubmit, etc? I assume that the browser is simply seeing the file and executing the containing functions. Also, I am receiving a cross origin error in chrome console. Does the php file need to be in the same directory as the jQuery function? Any input is appreciated.


回答1:


The key is here:

$(function login() {
});

Remember that jQuery is not a different language - it's just javascript with some helper functions already defined. So you're calling the $() function, and passing in a function as an argument. The fact that you're naming the function is irrelevant - it's still getting passed as a parameter to $().

When you call the $() or jQuery() function and pass in another function, it's a shortcut for defining a document-ready event handler. So your code is really the same as doing this:

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

...which causes it to run on every page load.

If you're just defining a function that will be called later, there's no reason to wrap it in $(). You can define your function like this instead:

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


来源:https://stackoverflow.com/questions/17335308/how-can-i-prevent-this-jquery-function-from-being-executed-on-every-page-load

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!