Я пытаюсь создать систему приглашения только для сайта 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
}
?>
Выглядит так, как будто вызов 'ev.preventDefault()' is ** вне ** код обработчика событий. – Pointy
спасибо karthikr, теперь проблема очевидна ... 'ev' не может использоваться вне функции – Oliboy50
Кроме того, что' '" + email + "" 'stuff не требуется, поскольку возвращаемое значение из' .val() 'всегда будет строкой. – Pointy