如果使用javascript输入为空,如何阻止提交

时间:2012-05-09 12:29:48

标签: javascript validation

我有一个登录表单,但我想检查字段是否为空,然后不提交。我在提交时“返回false”,但浏览器仍会加载新页面。我怎么能阻止它?

JS:

var username = document.getElementById('usernameField');
    var password = document.getElementById('passwordField');
    var loginBtn = document.getElementById('loginBtn');
    var infoBox = document.getElementById('formInfo');

    var isEmpty = /^\s*$/;

    var addEventTo = function(id, type, fn, capture) {
        if (document.addEventListener) {
            id.addEventListener(type, fn, capture);
        } else {
            id.attachEvent('on'+type, fn);
        }
    };

    function checkIfAllEmpty() {
        var loginForm = document.getElementById('loginform'),
            allInputs = loginForm.getElementsByTagName('input'),
            max = allInputs.length,
            i;

            for (i = 0; i < max; i++) {
                if (allInputs[i].type !== 'submit') {

                    if (allInputs[i].match(isEmpty)) {
                        infoBox.innerHTML = 'All your fields are empty';
                        return false;
                    }
            }
        }
    }

    //addEventTo(loginBtn, 'click', checkIfAllEmpty, false);

    if (document.addEventListener) {
            loginBtn.addEventListener('submit', checkIfAllEmpty, false);
    } else {
            loginBtn.attachEvent('onsubmit', checkIfAllEmpty);
    }

HTML:

<p id="formInfo"></p>
<form id="loginForm" method="post" action="#">
    <fieldset id="loginFieldset">
        <legend>Sign in</legend>
        <ol>
            <li>
                <label for="usernameField">Username</label><input type="text" placeholder="Enter username" id="usernameField" />
                <span>Please type in your username</span>
            </li>
            <li>
                <label for="passwordField">Password</label><input type="password" placeholder="Enter password" id="passwordField" />
                <span>Please type your password</span>
            </li>
            <li>
                <input type="submit" value="Sign in" id="loginBtn" />
            </li>
        </ol>
    </fieldset>
</form>

非常感谢

4 个答案:

答案 0 :(得分:7)

如果可以使用html5(适用于较新版本的Safari,Chrome,Firefox,Opera&gt; 11.00但不像往常一样使用IE),您可以在输入字段中添加所需的标记。

<p id="formInfo"></p>
  <form id="loginForm" method="post" action="#">
    <fieldset id="loginFieldset">
      <legend>Sign in</legend>
      <ol>
        <li>
         <label for="usernameField">Username</label>
         <input type="text" placeholder="Enter username" id="usernameField" required />
         <span>Please type in your username</span>
        </li>
        <li>
         <label for="passwordField">Password</label>
         <input type="password" placeholder="Enter password" id="passwordField" required />
         <span>Please type your password</span>
        </li>
        <li>
            <input type="submit" value="Sign in" id="loginBtn" />
        </li>
    </ol>
</fieldset>

答案 1 :(得分:6)

看起来onsubmit的事件监听器没有被正确添加,无论如何最简单的方法是在你的表单中添加onsubmit =“return someValidationFuncThatReturnTrueOrFalse()”:

<form id="loginForm" method="post" action="#" onsubmit="return validate()">

我可以问你为什么在你的js代码上使用这种方法吗?如果你的表格是静态的,那么它可以很容易地完成......

function validate() {
    if (document.getElementById("usernameField").value == "" && document.getElementById("usernameField").value == "") {
         alert("all fields are empty");
         return false;
    } else {
        return true;
    }
}

或类似的......

答案 2 :(得分:1)

您可以使用属性disabled =&#34;禁用&#34;对于表单输入:

http://www.w3schools.com/tags/att_input_disabled.asp

将提交按钮设置为禁用,然后为每个输入字段添加一个onchange侦听器,这样如果每个字段都填满,则删除disable属性,用户可以对该表单进行子设置。

答案 3 :(得分:1)

我使用Prototype(作为javascript框架),这段代码应该可以工作:

JS:

function checkEmpties() {
    var usr = $('username');
    var pass = $('pass');
    var frm = $('formId');


    if (usr.value && pass.value) {
        //frm.submit();
        alert('submit');
    } else {
        alert('failed');
    }
}

Event.observe(window, 'DomReady', function() {
    var btn = $('submitBtn');
    Event.observe('submitBtn', 'click', checkEmpties);
}

HTML:

<form id="formId">
    <input type="text" name="username" id="username" />
    <input type="password" name="pass" id="pass" />
    <input type="button" id="submitBtn" value="Send"  />
</form>

它的作用: 文档加载后,将事件观察者附加到按钮,因此当单击它时,将调用函数checkEmpties。 此函数将检索输入的值,如果它们不为空,请提交表单。

希望有所帮助