我刚开始用这个js代码研究js
<div class="container">
<form name="myForm" action="#" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit" id="smit">
</form>
<script>
var smit=document.getElementById("smit");
smit.addEventListener("click",formvalidate(),false);
function formvalidate(){
console.log(" vua moi click submit");
if(t==null){
var t= document.forms["myForm"]["fname"].value;
if(t==null || t==""){
alert("xin dien vao email");
}
}
}
</script>
在浏览器中预览时,即使我没有点击提交按钮,也会自动显示警告弹出窗口。 有人可以解释一下发生了什么吗? 感谢。
答案 0 :(得分:5)
函数名后面的括号会使函数立即被调用。由于您只是将其指定为事件侦听器,因此您希望传递它。
删除括号,它将在执行前等待点击:
smit.addEventListener("click", formvalidate, false);
// ^^ No parentheses
答案 1 :(得分:2)
我做了一些小改动,所以它也适用于IE:
<form name="myForm" id="myForm" action="#" method="post">
First name: <input type="text" name="fname" id="fname">
<input type="submit" value="Submit" id="smit">
</form>
<script >
function formvalidate(event){
//removed console log because that only works in ie
// when debugging
var t= document.getElementById("fname").value;
if(t==""){
alert("xin dien vao email");
if(event.preventDefault){ event.preventDefault()};
if(window.event){window.event.returnValue = false;}
}
}
var smit=document.getElementById("myForm");
if(smit.addEventListener){
smit.addEventListener("submit",formvalidate,false);
}else{
//ie doesn't have addEventListner
smit.attachEvent('onsubmit', formvalidate);
}
</script>
答案 2 :(得分:1)
从formvalidate中删除括号,例如:
smit.addEventListener("click",formvalidate(),false);
到
smit.addEventListener("click",formvalidate,false);
请参阅:addEventListener
答案 3 :(得分:0)
事件监听器不包含括号,将其删除。如果你为它添加括号,它看起来像函数,但在这里你必须分配你的eventlistener。
smit.addEventListener("click",formvalidate,false);