2013-10-08 62 views
0

我一直在嘗試爲我正在工作的一個WordPress網站(儘可能避免插件)創建一個僅邀請系統。解決方法:preventDefault()停止提交jquery表單值

該網站是一個魔獸世界公會網站,我有一個頁面列出了公會的新申請人,有接受和拒絕選項。這一切工作正常。

但是,我試圖通過ajax做表單提交,這就是我感到困惑的地方。 我有我的形式

<?php 
    global $current_user; 
    // if the user can send invites 
    if (current_user_can("invite_users")) { 
    ?> 
    <form action="applicantaccept" class="applicantacceptform" method="GET"> 
     <input type="hidden" name="email" value="<?php echo $row['Email'];?>" /> 
     <input type="hidden" name="invitecode" value="<?php echo generateRandomString(); ?>" /> 
     <input style="background: none; border: none; color: white; text-decoration: underline; font-size: 1em; float: left;" type="submit" value="Send Invitation" /> 
    </form> 
    <?php 
    } 
?> 

而且我有我的jquery:

// ACCEPT 
$('.applicantacceptform').submit(function (ev) { 
    // INVITE FORM 
    var form = $(this); 

    var email = form.find('input[name="email"]').val(); 
    var invitecode = form.find('input[name="invitecode"]').val(); 

    $.post("applicantaccept", { 
     email: "" + email + "", 
     invitecode: "" + invitecode + "" 
    }) 
     .done(function (data) { 
     alert("Applicant Accepted" + data); 
    }) 
     .fail(function (data) { 
     alert("Failed To Accept Applicant. Please speak to administrator if this problem continues"); 
    }); 
ev.preventDefault(); 
}); 

當我與ev.preventDefault()目前提交,警報顯示成功。然而這些值被解析爲空字符串,直到目標頁面給我空白的SQL記錄。但是,如果我刪除了預防性默認設置,我當然會按照鏈接進行操作,但是這些值現在可以正確發送。

這可能是什麼原因造成的?

編輯:感謝@Pointy的修復,下面工作的代碼(簡單的形式,以 「POST」

<?php 
global $current_user; 
// if the user can send invites 
if (current_user_can("invite_users")) { 
    ?> 
    <form action="applicantaccept" class="applicantacceptform" method="POST"> 
     <input type="hidden" name="email" value="<?php echo $row['Email'];?>" /> 
     <input type="hidden" name="invitecode" value="<?php echo generateRandomString(); ?>" /> 
     <input style="background: none; border: none; color: white; text-decoration: underline; font-size: 1em; float: left;" type="submit" value="Send Invitation" /> 
    </form> 
    <?php 
} 
?> 
+1

在我看來,就好像對'ev.preventDefault()'的調用是**外**事件處理程序代碼。 – Pointy

+0

謝謝karthikr,現在問題很明顯了......'ev'不能用於函數之外 – Oliboy50

+1

另外,''「+ email +」「'東西不是必須的,因爲'.val() '將永遠是一個字符串。 – Pointy

回答

0

你試過return false;,而不是ev.preventDefault();

+0

這個問題或答案?或兩者? – undefined

+0

我給它一個去,得到完全一樣的結果:/ –

+0

我還不能評論,所以它都是:) – Piotr

0

認沽切換 「GET」? ev.preventDefault()作爲該函數的第一行,我的猜測是它試圖在發送表單提交之前關注鏈接。