Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提交调用函数两次_Javascript_Html_Forms - Fatal编程技术网

Javascript 提交调用函数两次

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>

当我用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();">
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"/>