2013-10-08 6 views
0

Я пытаюсь создать систему приглашения только для сайта wordpress, над которым я работаю (при попытке избежать плагинов, где это возможно).SOLVED: preventDefault() останавливает отправку значений формы jQuery

Сайт - это мир гильдии Warcraft, и у меня есть страница, в которой перечислены новые кандидаты в гильдию, с параметрами Accept и Reject. Это все работает нормально.

Тем не менее, я пытаюсь выполнить форму представления через 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. Однако, если я удаляю preventdefault, я, конечно, следую ссылке, но значения теперь отправляются правильно.

Что может быть причиной этого?

EDIT: Благодаря @Pointy для исправления, рабочий код ниже (просто переключился "GET" в форме "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()' is ** вне ** код обработчика событий. – Pointy

+0

спасибо karthikr, теперь проблема очевидна ... 'ev' не может использоваться вне функции – Oliboy50

+1

Кроме того, что' '" + email + "" 'stuff не требуется, поскольку возвращаемое значение из' .val() 'всегда будет строкой. – Pointy

ответ

0

вы пробовали return false; вместо ev.preventDefault();

+0

Этот вопрос или ответ? или оба? – undefined

+0

Я дал ему ход, получил тот же результат:/ –

+0

Я еще не могу прокомментировать, так что это оба :) – Piotr

0

Put? ev.preventDefault() как первая строка в этой функции. Я предполагаю, что она пытается следовать ссылке перед запуском формы submit.

Смежные вопросы