1

私はjqueryを初めて使用するので、ボタンをクリックしてEnterキーを押してフォームを検証する方法のスタックオーバーフローに関するいくつかの例を読み、それらに従いました.何らかの理由で、私のコードは機能しません.あなたは私に私の間違いがあると説明してくれますか?事前に感謝します!

$(document).keyup(function(event) {
    if(event.keyCode == 13){
    $("#clickButton").click(function () {
        var username = document.forms["form1"]["username"];
        var password = document.forms["form1"]["password"];
        var numbers = /^[0-9]+$/;
        if (username.value == "" || password.value == "") {
            alert("Data missing");
        } else if (username.value.match(numbers)) {
            alert('Data not valid');
        } else {
            alert("Your password is " + password.value);
        }
    });
}
});
4

3 に答える 3

1

キーアップ内でクリックをバインドしているため、Enter キーが押されるたびに、新しいクリック ハンドラーがバインドされます。

$('#formId input').on('keyup', function(event) {
    if(event.which === 13) {
        event.preventDefault();
        validate();
    }
});

$("#clickButton").on('click', function(event) {
    event.preventDefault();
    validate();
});

function validate() {
    var username = $("#username"), // give elements ID's
        password = $("#password");

    if (username.val() == "" || password.val() == "") {
        alert("Data missing");
    } else if (username.val().match(/^[0-9]+$/)) {
        alert('Data not valid');
    } else {
        alert("Your password is " + password.val());
        document.getElementById('formId').submit();
    }
}

送信がクリックされたときと入力でEnterが押されたときの両方でトリガーされるため、フォーム送信イベントに検証をバインドするだけです。

$('#formId').on('submit', function(e) {
    e.preventDefault();
    var username = $("#username"), // give elements ID's
        password = $("#password");

    if (username.val() == "" || password.val() == "") {
        alert("Data missing");
    } else if (username.val().match(/^[0-9]+$/)) {
        alert('Data not valid');
    } else {
        alert("Your password is " + password.val());
        this.submit();
    }
});
于 2013-06-28T12:14:49.727 に答える