【问题标题】:Double Alert Windows双重警报窗口
【发布时间】:2014-09-23 11:27:45
【问题描述】:

我收到一个表单的双重警报提示:警报第一次弹出,然后当我单击“确定”时,同一个表单再次弹出。我认为我的代码在点击“else window.alert(sameWarning)”时应该发出一次警报,并在达到“return false()”时停止;但似乎 return false() 会导致两次警报。也许是因为我有一页上有两个表单;但是,它们有两个单独的函数名称(“signinForm()”和“saveSignUp()”)并调用两个单独的表单(forms[0] 和 forms[1])?我认为我的代码是正确的,但我现在无法弄清楚。任何帮助将不胜感激。提前致谢!

<script type="text/javascript">
//FIRST FUNCTION FOR FORMS[0]
function signinForm(){

        // var sameWarning = "The required fields were not submitted for the following error(s).  \n \n";
        var warningLogin = "The following field(s) require an entry: \n \n";
        var sameWarning = warningLogin;

        var userName = document.forms[0].userName.value;
        var pswd = document.forms[0].pswd.value;

        if(userName == ""){ 
        sameWarning += " - First Name \n";
        }

        if(pswd == ""){ 
        sameWarning += " - Password \n";
        }

        if (warningLogin == sameWarning){ 
            return true; 
            }

        else  { 
            window.alert(sameWarning);  
        }
    return false;   
   }

//SECOND FUNCTION CALL FOR FORMS[1] 
function saveSignUp(){

        // var warning = "The required fields were not submitted for the following error(s).  \n \n";
        var warning = "The following field(s) require an entry: \n \n";
        var same = warning;

        var firstName = document.forms[1].firstName.value;
        var lastName = document.forms[1].lastName.value;
        var email = document.forms[1].email.value;
        var phone = document.forms[1].phoneNumber.value;

        if(firstName == ""){ 
        //firstName.style.backgroundColor="red";
        warning += " - First Name \n";
        }

        if(lastName == ""){ 
        warning += " - Last Name \n";
        }

        if(email == ""){ 
        warning += " - Email \n";
        }

        if(phone == ""){ 
        warning += " - Work Phone \n";
        }

        if(phone < 5 ){
            warning += " - Must be a numberssss \n";
            }

        if (warning == same){
            return true; 
        } 

        else  { 
            alert(warning);         
        }
    return false;
   }

</script>

HTML

<h1>Login</h1>
<form method="post" onsubmit="return signinForm();" action="" >
    <input type="text" placeholder="Username/Email" name="userName">
    <input type="password" placeholder="Password" name="pswd" id="pswd">
    <input type="submit" onclick="signinForm();" value="Sign In">
</form>
<h1>Sign Up!</h1>
    <form method="post" onsubmit="return saveSignUp()" action="" >
    <input type="text" placeholder="First Name" name="firstName">
    <input type="text" placeholder="Last Name" name="lastName">
    <input type="text" placeholder="Email" name="email">
    <input type="text" placeholder="Phone Number" name="phoneNumber">
    <input type="submit" onclick="saveSignUp();" class="button wide" value="Request an Account">        

【问题讨论】:

    标签: javascript forms alert


    【解决方案1】:

    这是因为你给signinForm();打了两次电话。

    删除这些侦听器之一

    onclick="signinForm();"

    onsubmit="return signinForm()"

    当您单击提交按钮时,您调用signinForm();。并且因为是submit按钮,所以会触发onsubmit事件,并调用return signinForm()

    【讨论】:

    • onsubmit 是否是一个特殊的事件处理程序,仅适用于按钮 type=submit?开发人员是否更倾向于使用 onclick 和 onsubmit?
    【解决方案2】:

    当您单击提交时,它首先触发点击事件(调用您的函数),然后触发提交事件(再次调用您的函数)。只需删除提交按钮的 onclick。

    【讨论】:

    • 成功了!谢谢。我不知道方法调用的优先顺序高于提交调用。那么,onclick 会先执行,然后它也会自动触发对函数的提交调用?
    • onsubmit 和 onclick 没有区别,它们只是在元素上注册事件处理程序的方法。因此,当您单击输入时会调用“saveSignUp()”,而当您提交表单时会调用“return saveSignUp()”。碰巧input type="submit" 是一种特殊的按钮,可以自动提交表单。
    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 2013-12-15
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多