2016-11-17 77 views
2

当我用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 = ""; 
} 

回答

3

在你的onsubmit处理,您要提交表单:

form.submit(); 

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

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

否则,你将手动提交表单,那么浏览器就会提交第二次,因为的onsubmit没有返回假;

+0

简单的解决方案。有用。谢谢! – Mirakurun

+0

你能解释一下为什么我的代码可以在Firefox中使用,但不能在Chrome中使用? – Mirakurun

+1

我不是100%确定的,但我的猜测是,由于提交表单意味着浏览器将导航到新的资源,所以发生了什么事情是您告诉浏览器快速连续两次加载另一个页面。 Firefox可能会在第二个请求发生时立即取消第一个请求,而Chrome开发人员则选择同时处理这两个请求。 –

0

你有两个的提交:

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

删除其中的一个

+0

那么,如果我删除其中的一个,我将无法使用Enter和Button进行提交。 – Mirakurun

+0

他是对的。你的按钮必须是type =“submit” – yBrodsky

+0

他错了;具有多个调用函数的元素并不一定意味着该函数被多次调用。 –

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() 
} 
0

<form>标签取下onsubmit="submitForm();并创建<form>标签内的<input type="submit" onclick="submitForm();>

0

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

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

所以的onsubmit电话就足够了。