1

ログインフォームがありますが、フィールドが空かどうかを確認してから送信しないでください。送信時に「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

4 に答える 4

8

html5 を使用しても問題ない場合 (Safari、Chrome、Firefox、Opera > 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>

于 2012-05-09T12:56:44.927 に答える
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;
    }
}

またはそのようなもの...

于 2012-05-09T12:56:10.013 に答える
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が呼び出されます。この関数は入力の値を取得し、それらが空でない場合はフォームを送信します。

それが役に立てば幸い

于 2012-05-09T13:04:50.297 に答える
1

フォーム入力に属性 disabled="disabled" を使用できます:

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

送信ボタンを無効に設定し、各入力フィールドに onchange リスナーを追加して、すべてのフィールドが入力されたら無効化属性を削除し、ユーザーがフォームを送信できるようにします。

于 2012-05-09T12:44:30.083 に答える