当我使用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 = "";
}
答案 0 :(得分:4)
在您的onsubmit处理程序中,您需要提交表单:
form.submit();
如果你这样做,处理程序必须返回false,这意味着你需要
<form ... onsubmit="submitForm(); return false;">
否则您将手动提交表单,然后浏览器将再次提交表单,因为onsubmit没有返回false;
答案 1 :(得分:1)
我可以看到两个可能的原因:
1-您安装了两个处理程序:onSubmit
和onClick
。而是离开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调用就足够了。