我对javascript非常新鲜,如果我缺少明显的东西,则很抱歉。
我试图在提交表单上显示一个隐藏的div,但不立即显示它,而是需要稍微延迟出现(例如3秒(。
我尝试在" onsubmit"属性上使用settimeout((函数,但隐藏的div立即出现,而不是延迟。
这是一个最小示例:
<!DOCTYPE html>
<html>
<body>
<p>When you submit the form, a function is triggered which alerts some text.</p>
<form action="/action_page.php" onsubmit="setTimeout(myFunction(), 3000)">
Enter name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
<div id="message" style="display: none">Loading...</div>
<script>
function myFunction() {
document.getElementById("message").style.display = "block"
}
</script>
</body>
</html>
也可以在这里提供:https://www.w3schools.com/code/code/tryit.asp?filename = g3y3e1yisnh1
总而言之,setTimeout()
正在运行my功能,但没有预期的延迟。如果有人可以帮助我正确获取我的代码,我将非常感谢!谢谢。
使用现代JS约定。在JS一侧,而不是HTML侧,找到您的表格,并使用事件侦听:
let form = ... // there are many easy ways to get this element
form.addEventListener("submit", evt => {
// don't actually submit this form to its associated URL:
evt.preventDefault();
// and schedule the timeout
setTimeout(myFunction, 3000);
});
您必须发送函数才能执行功能。两者都使用:
onsubmit="setTimeout('myFunction()', 3000)"
或以这种方式使用:
onsubmit="setTimeout(function () { myFunction(); }, 3000)"
另外,由于不提交表单,您可以尝试执行return false
:
onsubmit="setTimeout(function () { myFunction(); }, 3000); return false;"
,请使用addEventListener
。
您在分配过程中执行该功能。卸下括号()
。实际上,您需要将函数作为参数传递。添加括号时,您要执行该功能,然后将函数的返回值传递为参数。
<form onsubmit="setTimeout(myFunction, 3000)">
此外,您也不应完全使用onsubmit
并完全使用内联作业。有关更多信息,请参见此答案。
您正在调用myFunction,而不是将函数作为回调传递给setTimeout
。更改setTimeout(myFunction(), 3000)
---> setTimeout(myFunction, 3000)
谢谢