1

これは初歩的なことのように聞こえますが、正直にダイヤルすることはできません。1ページに2つのフォームがあります。そのようにトリガーされるいくつかのフォーム検証関数を作成しました。

$("form").submit(function(event) {
    event.preventDefault();
    checkRequired();
    checkLengths();
    checkFormats();
    checkErrors();
});

これは素晴らしいですが、関数内では、送信ボタンがクリックされた元$(this)を識別するために使用することはできません。<form>

checkRequired()関数alert($(this).attr('id'));で書いたとしましょう。「オブジェクト、オブジェクト」に警告します。

同じコードを関数内に配置すると$("form").submit()、フォームのIDが返されます。

関数内のセレクターは$("input[type='text']")似たようなものですが、関数は送信されたフォームの入力だけでなく、すべての入力で実行されます。

使用したサンプルfunction():

function checkFormats() {

    alert("Checking Formats...");

    $(".email").each(function(){

        alert("Checking Formats: Email...");

        var emailField = $(this).children("input[type='text']");
        var strEmail = emailField.val();

        if( strEmail.indexOf( "@" ) == -1 ) {
            alert("What the hell?");
        }

    });

}

解決策を聞いたらばかげていると思いますが、ちょっと疲れすぎてます笑…よろしくお願いします!

$("form",this)多分私をどこかに連れて行くかもしれないと思っていますか?

4

3 に答える 3

3

フォームをメソッドに渡すことはできませんか?

$("form").submit(function(event) {
    event.preventDefault();
    checkRequired(this);
    checkLengths(this);
    checkFormats(this);
    checkErrors(this);
});

次に、適切なコンテキストがあります。これで、次のように、指定したフォームのコンテキスト内で追加の要素を選択できます。

function checkFormats(theForm) {
    $form = $(theForm);

    alert("Checking Formats...");
    
    // Get emails from within the context of the current form.
    $(".email", $form).each(function(){

        alert("Checking Formats: Email...");

        var emailField = $(this).children("input[type='text']");
        var strEmail = emailField.val();

        if( strEmail.indexOf( "@" ) == -1 ) {
            alert("What the hell?");
        }

    });
}

代替-JavaScriptを使用します.apply

(コメントでマイク・ロビンソンが述べたように)


$("form").submit(function(event) {
    event.preventDefault();
    checkRequired.apply(this);
    checkLengths.apply(this);
    checkFormats.apply(this);
    checkErrors.apply(this);
});

次にthis、関数内でフォームになります。これで、次のように使用できます。

function checkFormats(theForm) {
    $form = $(this);

    alert("Checking Formats...");
    
    // Get emails from within the context of the current form.
    $(".email", $form).each(function(){

        alert("Checking Formats: Email...");

        var emailField = $(this).children("input[type='text']");
        var strEmail = emailField.val();

        if( strEmail.indexOf( "@" ) == -1 ) {
            alert("What the hell?");
        }

    });
}

デモ-使用.apply


デモでは、単純なHTML From:を使用します。

<form>
    <button type="submit">submit</button>
</form>

このスクリプトを使用すると:

$("form").submit(function (event) {
    event.preventDefault();
    checkRequired.apply(this);
});

function checkRequired() {
    alert("This is of type: " + this.nodeName);
}
于 2013-01-28T21:53:04.710 に答える
0

フォームにIDを指定し、jquery呼び出しでそれを参照します。

$("#form1").submit(function(event) {
event.preventDefault();
checkRequired();
checkLengths();
checkFormats();
checkErrors();
});
于 2013-01-28T21:50:35.750 に答える
0

必要なのは、各フォーム要素の一意の名前です。選択する必要のあるフォームを選択できるjqueryセレクターについて読む

IDを使用する

$('#form_id')

クラス

$('。form1')

または配列内のインデックスですら。

$('form:first')[0] $('form:last')

于 2013-01-28T21:54:10.480 に答える