不知道从哪里开始。可能会犯很多错误,但这里也是如此。
我希望我的表单首先通过onSubmit调用js验证,并且只有在验证变为true的情况下才通过操作执行php函数...如果这是有意义的,甚至可能吗?
我的表格:
<form method="post" name="editForm" action="edit_account.php" onsubmit="return checkForm();">
<label>Change email:</label>
<input type="text" name="changeMail" value="<?php echo htmlentities ($_SESSION['sess_email'], ENT_QUOTES, 'UTF-8'); ?>">
<label>Change password:</label>
<input type="text" name="changePass">
<input type="submit" name="submit" value="Save changes">
</form>
Javascipt验证:
<script type="text/javascript">
function checkForm() {
var x = document.forms["editForm"]["changeMail"].value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
alert("Not a valid E-mail address");
this.changeMail.focus();
return false;
}
}
</script>
PHP函数:
function edit_account_update(){
<h1>Hello</h1>
}
以及从表单操作执行PHP函数的if语句:我知道这个当前使用$ _POST [&#39;提交&#39;]所以if语句总是在提交后激活,但我不知道想要那个。
if(isset($_POST['submit'])) {
edit_account_update();
}
答案 0 :(得分:0)
你应该在这一行看到错误 - 观察你的开发者控制台(F12):
this.changeMail.focus();
因为在没有任何上下文的情况下调用了checkForm()函数,因此this
将引用window
对象而不是表单。
您可以使用Function.prototype.call()
onsubmit
属性中的上下文
onsubmit="return checkForm.call(this);"
或(最好)使用不引人注目的JavaScript。
window.onload = function(){
document.forms["editForm"].onsubmit = checkForm;
};
通过上述操作,checkForm
会自动应用this
上下文。