提交呼叫功能两次

时间:2016-11-17 13:45:18

标签: javascript html forms

当我使用Enter提交表单时,它没有任何问题。我可以成功登录。当我使用按钮提交表单时,它会在Firefox上成功登录,但不会在Chrome上登录。问题是,它重复两次该函数并发送一个不同的哈希密码。我怎样才能让它在Chrome上运行?

按钮:

<div id="submit" name="submit" value="login" class="ui fluid large pink submit button" onclick="submitForm();">Login</div>

表格:

<form id="form" autocomplete="off" class="ui large form" id = "form" name="form" method="post" action="php/verify.php" onsubmit="submitForm();">

我添加了onsubmit="submitForm();"表单,即使我使用Enter提交表单也要调用该函数。

Javascript功能:

function submitForm(){
    var form = document.getElementById("form");
    var pwd = document.getElementById('pwd');
    var hash = new jsSHA("SHA-256", "TEXT", {numRounds: 1});
    hash.update(pwd.value);
    var hash = hash.getHash("HEX");
    var password = document.createElement("input");
    password.name="password";
    password.type="hidden";
    password.id = "password";
    password.value = hash;
    alert(password.value);
    form.appendChild(password);
    form.submit();
    pwd.value = "";
}

5 个答案:

答案 0 :(得分:4)

在您的onsubmit处理程序中,您需要提交表单:

 form.submit();

如果你这样做,处理程序必须返回false,这意味着你需要

<form ... onsubmit="submitForm(); return false;">

否则您将手动提交表单,然后浏览器将再次提交表单,因为onsubmit没有返回false;

答案 1 :(得分:1)

我可以看到两个可能的原因:

1-您安装了两个处理程序:onSubmitonClick。而是离开onSubmit处理程序并使用submit类型的按钮:

<form onsubmit="submitForm()">
  <input type="submit"> <!-- this is equivalent to pressing enter -->
  <button type="submit"></button> <!-- also equivalent -->
</form>

2-如果您要在事件处理程序中手动submit表单,则应该停止发生默认行为,这可能会导致第二次(未处理)提交:

function submitForm(event) {
  event.preventDefault()
}

答案 2 :(得分:0)

您有两个提交:

onsubmit="submitForm();" and onclick="submitForm();"

删除其中一个

答案 3 :(得分:0)

onsubmit="submitForm();代码中移除<form>,并在<input type="submit" onclick="submitForm();>代码中创建<form>

答案 4 :(得分:0)

您可以使用输入控件(type = submit)代替登录按钮的div 这是这样的:

<input type="submit" value="Login" class="ui fluid large pink submit button"/>

所以onsubmit调用就足够了。