1

問題の解決策があると信じていますが、確認したいと思います。これは私が持っているものです:

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

onSubmitjQuery 関数へのリンクは外部ファイル 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 関数と同じディレクトリにある必要がありますか? どんな入力でも大歓迎です。

4

1 に答える 1

4

鍵はここにあります:

$(function login() {
});

jQuery は別の言語ではないことに注意してください。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...
}
于 2013-06-30T06:43:18.907 に答える