0

編集:答えた、構文エラーでした、修正されたコードについては以下を参照してください...

こんにちは、長年の読者であり、初めての質問者です。

以下のコードは、条件ステートメントの外側で、関数の最後で戻り値をオーバーライドしたとしても、常にフォームの送信を許可しています。フォームの送信は、関数本体に return false を除いて何もない場合にのみ許可されません。ひどく奇妙です。

関数本体にアラートを入力し、アラートが表示されることを確認することで、フォーム送信時に関数が呼び出されていることを確認しました。コードを個別の関数に取り除き、それをイベントハンドラーとして指定しようとしましたが、違いはありません。

回避策は、おそらくコントロールの状態を監視し、それに応じてフォームの送信ボタンを無効/有効にすることですが、この手法は他の場所でも機能するため、明らかに何かが欠けています。

誰にもアイデアはありますか?私のgoogle-fuは私に失敗しました.SOには、これについて私が見ることができるものは何もありません(まだ)。私は機知に富んでいます。ところで、これのコンテキストは FF3、jQuery 1.4.2 であり、私は会社の mantisbt のインストールに取り組んでいます。フォームの html は完全に正常です。

乾杯、

G

    jQuery(document.forms[2]).submit(function(){

    var canSubmit = true;
    var msg = '';   

    // we only do validation if those controls are present and have some options which can be selected
    if(jQuery("select[name=priority] option").length() > 0 && jQuery("select[name=severity] option").length() > 0){

        //there must be a selection in priority
        if(jQuery("select[name=priority]").val() == ''){

            canSubmit = false;
            msg = msg + 'Please select a priority!\n';

        }

        //there must be a selection in severity
        if(jQuery("select[name=severity]").val() == ''){

            canSubmit = false;
            msg = msg + 'Please select a severity!\n';

        }

        //the priority cannot be P1 or P2 and also a feature request
        if( jQuery("select[name=priority]").val() > 49 
                && jQuery("select[name=severity]").val() == 60){

            canSubmit = false;
            msg = msg + 'Feature requests cannot be P1 or P2!';             

        }

        //if there is some feedback, alert it to the user
        if(msg != ''){

            alert(msg);

        }

    }

    //debugging override - always return false!
    return false; //instead of canSubmit;       

});

編集:ここに修正コードがあります。どうもありがとうギャビー!

    var canSubmit = true;
var msg = '';

// validate form submission
jQuery(document.forms[2]).submit(function(e){

    msg = '';
    canSubmit = true;

    // we only do validation if those controls are present and have some
    // options
    // which can be selected
    if(jQuery("select[name=priority] option").length > 0 && 
            jQuery("select[name=severity] option").length > 0){

        // there must be a selection in priority
        if(jQuery("select[name=priority]").val() == 0){

            canSubmit = false;
            msg = msg + 'Please select a priority!\n';

        }

        // there must be a selection in severity
        if(jQuery("select[name=severity]").val() == 0){

            canSubmit = false;
            msg = msg + 'Please select a severity!\n';

        }

        // the priority cannot be P1 or P2 and also a feature request
        if( jQuery("select[name=priority]").val() > 49 
                && jQuery("select[name=severity]").val() == 60){

            canSubmit = false;
            msg = msg + 'Feature requests cannot be P1 or P2!';             

        }           

        if(!canSubmit){

            // if there is some feedback, alert it to the user
            if(msg != ''){

                alert("There were some problems:\n" + msg);

            }

            return false;

        }

    }

});
4

2 に答える 2

1

JavaScriptエラーが発生しているため、常に送信され、コードはreturn falseステートメントに到達しません..

問題はlength()、jquery オブジェクトの関数がないことです。プロパティです。

.length()最初の で 2 つをに変更する必要があり.lengthますif

または、 メソッドを使用することもできます.size()

詳細については、http://api.jquery.com/length/を参照してください。

于 2010-11-12T14:09:41.103 に答える
0

「preventDefault()」を追加してみてください...

jQuery(document.forms[2]).submit(function(evt){
    evt.preventDefault();
    .
    .
    .

次に、検証と操作が完了したら、フォームの送信を手動で呼び出すことができます。

$(document.forms[2]).submit();
于 2010-11-12T12:39:26.507 に答える