3

私は自分自身が完全に途方に暮れていて、新鮮な目が必要なので、これを求めています。

次のJavaScript関数は、接続されたHTMLフォームの送信時に正常に呼び出されます。関数が開始され、最初の2つのifステートメントが実行されます(返される場合は送信を停止しfalseます)。

alert次に、 「前」の最初のテストが表示され、フォームが送信され、残りの関数が完全に欠落します。テスト中にfalse、関数が何が起こっても返されるように最終行を返すように変更しましfalseたが、フォームはまだ送信されています。

function validateForm(form)
{
    // declare variables linked to the form
    var _isbn = auto.isbn.value;
    var _idisplay = auto.isbn.title;
    var _iref = "1234567890X";
    // call empty string function
    if (EmptyString(_isbn,_idisplay)==false) return false;
    // call check against reference function
    if (AgainstRef(_isbn,_iref,_idisplay)==false) return false;
    // call check length function
    alert("before");///test alert

    ////// FORM SUBMITS HERE?!? /////////////

    if (AutoLength(_isbn)==false) return false;
    alert("after");///test alert
    // if all conditions have been met allow the form to be submitted
    return true;
}

編集:これはAutoLength次のようになります:

function AutoLength(_isbn) {
    if (_isbn.length == 13) {
        return true; {
    else {
        if (_isbn.length == 10) {
            return true; {
        else {
            alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
            return false;
        }
    }
4

2 に答える 2

1

の実装にエラーがありますAutoLength。現在、次のようになっています。

function AutoLength(_isbn) {
    if (_isbn.length == 13) {
        return true; { // <------ incorrect brace
    else {
        if (_isbn.length == 10) {
            return true; { // <------ incorrect brace
        else {
            alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
            return false;
        }
    }

すべてのブロックを閉じていないことがわかりますか? これは、間違ったブレースを 2 か所で使用し、関数を閉じるのを忘れたためです。

この関数を次のように書き直すことができます。

function AutoLength(_isbn) {
    return _isbn.length === 13  || _isbn.length === 10;
}

をどうしても使いalertたい場合は、内部でそれを行うことができますvalidateForm(ただし、エラー メッセージを表示するためのよりユーザー フレンドリーな方法を見つけようとします)。

将来、コードをデバッグしようとするときは、次のように and を使用tryして、それらが発生したときcatchに「キャッチ」できます。Errors

try {
    if (false === AutoLength(_isbn)) {
        return false;
    }
} catch (e) {
    alert('AutoLength threw an error: '+e.message);
}
于 2012-01-14T13:05:59.283 に答える
0

関数の実行が実行時エラーによって終了した場合、フォームは送信されます。そのため、スクリプト コンソール ログでエラー メッセージを確認してください。

于 2012-01-14T12:43:59.967 に答える