Javascript 提交调用函数两次
当我用Enter提交表单时,它可以正常工作。我可以成功登录。当我用按钮提交表单时,它会在Firefox上成功登录,但不会在Chrome上。问题是,它重复函数两次,并发送不同的哈希密码。我怎样才能让它也在Chrome上工作 按钮:Javascript 提交调用函数两次,javascript,html,forms,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>
<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();">
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 = "";
}
您有两个提交:
onsubmit="submitForm();" and onclick="submitForm();"
在onsubmit处理程序中删除其中一个,您正在提交表单:
form.submit();
如果这样做,处理程序必须返回false,这意味着您需要
<form ... onsubmit="submitForm(); return false;">
否则您将手动提交表单,然后浏览器将再次提交表单,因为onsubmit没有返回false 我可以看到两个可能的原因: 1-安装了两个处理程序:
onSubmit
和onClick
。相反,请保留onSubmit
处理程序,并使用带有submit
类型的按钮:
<form onsubmit="submitForm()">
<input type="submit"> <!-- this is equivalent to pressing enter -->
<button type="submit"></button> <!-- also equivalent -->
</form>
从
标记中删除onsubmit=“submitForm();
,并创建登录按钮可以使用输入控件(type=submit)而不是div。
这是这样的:
<input type="submit" value="Login" class="ui fluid large pink submit button"/>
所以onsubmit调用就足够了。如果我删除其中一个,我将无法同时使用Enter和Button进行提交。他错了;有多个元素调用一个函数并不一定意味着函数被调用多次。但是不需要两次提交,因为只需一次就可以完成所需的提交。你能解释一下吗为什么我的代码可以在Firefox中使用,而不能在Chrome中使用?我不是100%确定,但我的猜测是,既然提交表单意味着浏览器将导航到一个新的资源,那么发生的事情就是你让浏览器快速连续加载另一个页面两次。Firefox可能会在第二次请求发生时立即取消第一次请求,而Chrome开发者选择同时处理这两个问题。
<input type="submit" value="Login" class="ui fluid large pink submit button"/>