2013-06-27 86 views
1

我相信我有解決我的問題,但我想確定。這是我有:如何防止在每次頁面加載時執行此jQuery函數?

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

現在onSubmit鏈接到一個jQuery函數是一個外部文件,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

的關鍵是在這裏:

$(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... 
} 
相關問題