简体   繁体   English

添加事件以提交按钮

[英]Add event to submit button

i have just started studying js with this js code 我刚刚开始用这个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>

When previewing in browser, a alert popup auto appear despite i not click on submit button. 在浏览器中预览时,尽管我没有单击“提交”按钮,但仍会自动显示警报弹出窗口。 Can anyone please explain me what happening? 谁能解释一下发生了什么? Thanks. 谢谢。

The parentheses after your function name causes the function to be called right away. 函数名称后的括号导致立即调用该函数。 Since you're just assigning it as the event listener, you want to pass it. 由于您只是将其分配为事件侦听器,因此您希望传递它。

Remove the parentheses and it'll wait for the click before executing: 删除括号,它将在执行之前等待单击:

smit.addEventListener("click", formvalidate, false);
//                                        ^^ No parentheses

I have made some little changes so it'll work in IE as well: 我做了一些小的更改,因此它也可以在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>

remove parenthesis from formvalidate, like: 从formvalidate删除括号,例如:

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

to

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

See: addEventListener 请参阅: addEventListener

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM