仅当onSubmit js validation为true时,才在表单操作中调用php函数

时间:2014-05-20 13:33:25

标签: javascript php forms validation

不知道从哪里开始。可能会犯很多错误,但这里也是如此。

我希望我的表单首先通过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();
}

1 个答案:

答案 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上下文。