我尝试使用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>
答案 0 :(得分:2)
当你的checkForm无法阻止表单提交时,这很奇怪。您的JS代码可能会抛出错误,然后代码继续运行。
简单的方法是将提交按钮更改为普通按钮。单击普通按钮时,表单不会自动提交。验证完成后,您可以通过jquery手动提交表单。
$('#button-id').click(function(){
var valid = true;
// perform the validation here, for example
if($('something').val() == "") {
valid = false;
// notice user the error
}
// Continue to validate
// Finally, check the valid
if(valid) {
('#form-id').submit();
}
});
在验证部分,您可以使用jQuery验证,然后您可以按照
进行操作var form = $( "#myform" );
form.validate();
$( "button" ).click(function() {
if(form.valid()) {
form.submit();
}
});
答案 1 :(得分:0)
您应该将验证检查客户端/服务器分开。在提交之前使用JS,之后使用PHP。不要把两者交织在一起。当您通过php调用JS时,服务器必须向浏览器(客户端)发送响应,以便发生任何事情,从而重新加载页面。
示例:echo "<script> checkDates(false); </script>";
Echo()将输出发送到浏览器(客户端)。在这个例子中,需要JS来运行一个函数。
使用。(模糊)在提交之前实时进行简单验证。提交后,您将使用PHP服务器端验证。永远不要依赖客户。 JS可以通过浏览器关闭,编辑等。
<form>
<input tabindex="1" id="field1" type="text" name="field1" value="value 1" required />
<input tabindex="2" id="field2" type="text" name="field2" value="value 2" required />
<input tabindex="3" type="text" name="field3" value="value 3" />
<input tabindex="4" type="submit" name="submit" value="Submit" />
</form>
<script>
/* Simplistic validation */
jQuery(document).ready(function($){
jQuery(document).on("blur", "#field1", function(){
// validate this field
});
jQuery(document).on("blur", "#field2", function(){
// validate this field
});
});
</script>