【发布时间】:2015-12-02 00:37:43
【问题描述】:
我正在尝试使用 PHP 验证表单中的字段,但如果验证中出现错误,我需要类似于 e.preventDefault() 来阻止页面刷新/加载。我对 JavaScript/jQuery 不是很熟悉,所以我更喜欢用 PHP 处理所有的 POST 数据(如果可能的话)。我试图在提交时运行 checkForm() 函数,但我意识到它总是返回 true,因为它在数据发布之前运行。我还考虑过创建一个 JS 函数来调用 e.preventDefault(),但我认为我唯一的选择是 (#form).submit() 函数,我想避免在 JS/jQuery 中检索和发布数据,因为有些元素是 DOM 元素,我不知道如何在 JS/jQuery 中访问它们。
为了让您了解我正在使用的 DOM 元素,这里有一个动态创建行的 jsfiddle:
https://jsfiddle.net/hnj6ed1y/52/
可能有多行并且字段具有相似的名称(即:textfield1、textfield2 等)。
有什么想法吗?提前感谢您的所有帮助!
<?php
// setting initial variables here
?>
<script>
var isDateTimeValid = true;
function checkDates(val) {
if (val == false) {
isDateTimeValid = false;
}
else {
isDateTimeValid = true;
}
}
function checkForm () {
if (isDateTimeValid == true) {
return true;
}
else {
alert("Please check date/times");
return false;
}
}
</script>
<?php
if(isset($_POST['next'])){
// Validating POST data here
$dateValid = convertOORDateTime($date1, $time1, $date2, $time2);
if ($dateValid < 1) {
echo "<script> checkDates(false); </script>";
$errors[] = 'Please make sure your dates are correct';
}
else {
echo "<script> checkDates(true); </script>";
}
}
$err_msg = '';
if(!empty($errors)){
// want to stop page refresh/load here
$err_msg = '<p class="error">'.implode('<br />', $errors).'</p>';
}
?>
<!DOCTYPE html>
<form name="form1" id="form1" method="post" action="<?php print $thispage;?>" onsubmit="return checkForm()">
<?php echo $err_msg; ?>
</form>
【问题讨论】:
-
要么你糊涂,要么我糊涂。
-
@bassxzero 我肯定很困惑。我只是试图验证 PHP 中的 POST 数据(正在工作),但是当我遇到无效数据时,我需要防止页面重新加载。我知道 HTML 中的“回声”需要重新加载页面,但我可以解决这个问题。
-
所以您希望服务器在不刷新页面的情况下检查您的页面?这可能吗?
-
我不认为你的代码结构可以做你想做的事。如果您要依赖 javascript 并且想要验证数据服务器端,我会阻止默认提交操作,使用 Ajax 将表单数据提交到处理验证脚本,然后在数据有效时提交表单。
-
@bassxzero 我从未使用过 Ajax,但这是否意味着我使用 (#form).submit,在该侦听器上调用 e.preventDefault,并在该函数中使用 Ajax?任何可能的伪代码或通过 Ajax 调用验证脚本的示例?
标签: javascript php jquery html