1

我刚开始用这个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>

在浏览器中预览时,尽管我没有单击提交按钮,但会自动弹出警报弹出窗口。谁能解释一下发生了什么?谢谢。

4

4 回答 4

6

函数名称后的括号会立即调用该函数。由于您只是将其分配为事件侦听器,因此您想传递它。

删除括号,它会在执行前等待点击:

smit.addEventListener("click", formvalidate, false);
//                                        ^^ No parentheses
于 2013-01-28T03:38:46.917 回答
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>
于 2013-01-28T04:01:08.863 回答
1

从 formvalidate 中删除括号,例如:

smit.addEventListener("click",formvalidate(),false); 

smit.addEventListener("click",formvalidate,false); 

请参阅:addEventListener

于 2013-01-28T03:41:08.563 回答
0

事件监听器不包含括号,删除它。如果你给它添加括号,它看起来像函数,但在这里你必须分配你的事件监听器。

smit.addEventListener("click",formvalidate,false); 
于 2013-01-28T03:47:18.703 回答