JQuery: event.preventDefault() 没有阻止刷新
JQuery: event.preventDefault() isn't preventing a refresh
我一直在构建一个邮件表单,该表单应该将信息传递到处理清理和邮寄的 php 文档中,但我不希望它刷新,所以我决定使用 JQuery 和 AJAX。我是 JQuery 的新手,之前没有使用过任何 AJAX,所以在这方面我有点菜鸟......
即使我有 .submit(function(e){e.preventDefault();});
它仍然以普通方式提交并在 PHP 中找不到 film_mail
时给出错误。这意味着它不会停止提交并且不会将代码传递给 PHP.
我已经用警报进行了测试,JQuery 可以在 if()
中使用,但在那之后出现了一些问题。
这是导致问题的代码(一些 类 和 ID 是瑞典语,但不会导致错误...)
HTML
<div id="film" class="hidden" >
<form id="film_form" action="formular-send.php" method="post">
<input id="film_mail" type="text" name="mail" placeholder="Mail adress">
<input id="film_nr" type="number" name="nr" min="1">
<input id="film_antal" type="number" name="antal" min="1">
<input id="film_namn" type="text" name="namn" placeholder="Namn">
<input id="film_adress" type="text" name="adress" placeholder="Adress">
<input id="film_ort" type="text" name="ort" placeholder="Ort">
<input id="film_postnr" type="text" name="postnr" placeholder="Postnummer">
<textarea id="film_medelande" name="medelande" placeholder="Medelande"></textarea>
<button id="film_submit" type="submit" name="submit">Skicka</button>
<div class="error-mesage" ></div>
</form>
</div>
JQuery
$(document).ready(() => {
var emne = $('#emneid').val();
if (emne == 'film') {
$('#film_form').submit(function(e) {
e.preventDefault();
var mail = $('#film_mail').val();
var nr = $('#film_nr').val();
var antal = $('#film_antal').val();
var namn = $('#film_namn').val();
var adress = $('#film_adress').val();
var ort = $('#film_ort').val();
var postnr = $('#film_postnr').val();
var medelande = $('#film_medelande').val();
var submit = $('#film_submit').val();
$.post('formular-send.php', {
film_mail: mail,
film_nr: nr,
film_antal: antal,
film_namn: namn,
film_adress: adress,
film_ort: ort,
film_postnr: postnr,
film_medelande: medelande,
film_submit: submit,
emne: emne
});
// I heard that .load() had been removed in 3.0 so i tried to use $.post() because I thougt that might work but it sadly didn't...
// but I kept the .load() incase it'd be useful
/*$('#film_form').load('formular-send.php', {
film_mail: mail,
film_nr: nr,
film_antal: antal,
film_namn: namn,
film_adress: adress,
film_ort: ort,
film_postnr: postnr,
film_medelande: medelande,
film_submit: submit,
emne: emne
});*/
});
} else {
}
})
PHP
<?php
$filmmail = $_POST['film_mail'];
?>
如果还有其他需要,我很乐意post。
我认为 $('#emneid').val()
returns 与 'film' 不同,您的听众永远不会依恋。
能否请您仔细检查 $('#emneid').val();
的返回值
<button>
没有属性 type,但是 <input>
有,尝试将 <button>
更改为 <input>
UPD
id 为#emneid 的标签在哪里?
试试这个。请用我的 HTML 代码替换您的 HTML。
<div id="film" class="hidden" >
<form id="film_form" action="formular-send.php" method="post">
<input id="film_mail" type="text" name="film_mail" placeholder="Mail adress">
<input id="film_nr" type="number" name="film_nr" min="1">
<input id="film_antal" type="number" name="film_antal" min="1">
<input id="film_namn" type="text" name="film_namn" placeholder="Namn">
<input id="film_adress" type="text" name="film_adress" placeholder="Adress">
<input id="film_ort" type="text" name="ort" placeholder="Ort">
<input id="film_postnr" type="text" name="film_ort" placeholder="Postnummer">
<textarea id="film_medelande" name="film_medelande" placeholder="Medelande"></textarea>
<button id="film_submit" type="submit" name="submit">Skicka</button>
<div class="error-mesage" ></div>
</form>
</div>
除了其他评论外,我认为您需要为您的按钮添加正确的名称,否则您的 PHP 表单将无法使用。
<?php
$filmmail = $_POST['film_mail']; //for the moment your need to put $_POST['mail'] because your button is named mail instead of film_mail
?>
在生产/后期使用中也请小心,不要直接使用 $_POST 否则您的代码会受到某些 SQL 注入等攻击。看看 htmlspecialchars
函数。
编辑:
我认为您可以只使用 HTML 表单和 php 来 post 您的数据,而无需 post 通过 JS/Jquery 处理数据。如果您想在发送之前进行一些数据验证,您可以在提交之前调用一个事件,如 post 中所述:()
我认为您的选择器触发功能可能有问题,我不知道提交功能,但可以尝试使用 on('submit')
或至少可以使用 on('click')
。
$(document).on('click', '#film_submit button[type=submit]', function(e) {
var isValid = $(e.target).parents('form').isValid();
if(!isValid) {
e.preventDefault(); //prevent the default action
}
});
我一直在构建一个邮件表单,该表单应该将信息传递到处理清理和邮寄的 php 文档中,但我不希望它刷新,所以我决定使用 JQuery 和 AJAX。我是 JQuery 的新手,之前没有使用过任何 AJAX,所以在这方面我有点菜鸟......
即使我有 .submit(function(e){e.preventDefault();});
它仍然以普通方式提交并在 PHP 中找不到 film_mail
时给出错误。这意味着它不会停止提交并且不会将代码传递给 PHP.
我已经用警报进行了测试,JQuery 可以在 if()
中使用,但在那之后出现了一些问题。
这是导致问题的代码(一些 类 和 ID 是瑞典语,但不会导致错误...)
HTML
<div id="film" class="hidden" >
<form id="film_form" action="formular-send.php" method="post">
<input id="film_mail" type="text" name="mail" placeholder="Mail adress">
<input id="film_nr" type="number" name="nr" min="1">
<input id="film_antal" type="number" name="antal" min="1">
<input id="film_namn" type="text" name="namn" placeholder="Namn">
<input id="film_adress" type="text" name="adress" placeholder="Adress">
<input id="film_ort" type="text" name="ort" placeholder="Ort">
<input id="film_postnr" type="text" name="postnr" placeholder="Postnummer">
<textarea id="film_medelande" name="medelande" placeholder="Medelande"></textarea>
<button id="film_submit" type="submit" name="submit">Skicka</button>
<div class="error-mesage" ></div>
</form>
</div>
JQuery
$(document).ready(() => {
var emne = $('#emneid').val();
if (emne == 'film') {
$('#film_form').submit(function(e) {
e.preventDefault();
var mail = $('#film_mail').val();
var nr = $('#film_nr').val();
var antal = $('#film_antal').val();
var namn = $('#film_namn').val();
var adress = $('#film_adress').val();
var ort = $('#film_ort').val();
var postnr = $('#film_postnr').val();
var medelande = $('#film_medelande').val();
var submit = $('#film_submit').val();
$.post('formular-send.php', {
film_mail: mail,
film_nr: nr,
film_antal: antal,
film_namn: namn,
film_adress: adress,
film_ort: ort,
film_postnr: postnr,
film_medelande: medelande,
film_submit: submit,
emne: emne
});
// I heard that .load() had been removed in 3.0 so i tried to use $.post() because I thougt that might work but it sadly didn't...
// but I kept the .load() incase it'd be useful
/*$('#film_form').load('formular-send.php', {
film_mail: mail,
film_nr: nr,
film_antal: antal,
film_namn: namn,
film_adress: adress,
film_ort: ort,
film_postnr: postnr,
film_medelande: medelande,
film_submit: submit,
emne: emne
});*/
});
} else {
}
})
PHP
<?php
$filmmail = $_POST['film_mail'];
?>
如果还有其他需要,我很乐意post。
我认为 $('#emneid').val()
returns 与 'film' 不同,您的听众永远不会依恋。
能否请您仔细检查 $('#emneid').val();
<button>
没有属性 type,但是 <input>
有,尝试将 <button>
更改为 <input>
UPD
id 为#emneid 的标签在哪里?
试试这个。请用我的 HTML 代码替换您的 HTML。
<div id="film" class="hidden" >
<form id="film_form" action="formular-send.php" method="post">
<input id="film_mail" type="text" name="film_mail" placeholder="Mail adress">
<input id="film_nr" type="number" name="film_nr" min="1">
<input id="film_antal" type="number" name="film_antal" min="1">
<input id="film_namn" type="text" name="film_namn" placeholder="Namn">
<input id="film_adress" type="text" name="film_adress" placeholder="Adress">
<input id="film_ort" type="text" name="ort" placeholder="Ort">
<input id="film_postnr" type="text" name="film_ort" placeholder="Postnummer">
<textarea id="film_medelande" name="film_medelande" placeholder="Medelande"></textarea>
<button id="film_submit" type="submit" name="submit">Skicka</button>
<div class="error-mesage" ></div>
</form>
</div>
除了其他评论外,我认为您需要为您的按钮添加正确的名称,否则您的 PHP 表单将无法使用。
<?php
$filmmail = $_POST['film_mail']; //for the moment your need to put $_POST['mail'] because your button is named mail instead of film_mail
?>
在生产/后期使用中也请小心,不要直接使用 $_POST 否则您的代码会受到某些 SQL 注入等攻击。看看 htmlspecialchars
函数。
编辑:
我认为您可以只使用 HTML 表单和 php 来 post 您的数据,而无需 post 通过 JS/Jquery 处理数据。如果您想在发送之前进行一些数据验证,您可以在提交之前调用一个事件,如 post 中所述:(
我认为您的选择器触发功能可能有问题,我不知道提交功能,但可以尝试使用 on('submit')
或至少可以使用 on('click')
。
$(document).on('click', '#film_submit button[type=submit]', function(e) {
var isValid = $(e.target).parents('form').isValid();
if(!isValid) {
e.preventDefault(); //prevent the default action
}
});