1

私のコードの一部を紹介します。私のかみそりのビューでは、HTMLForm があり、それを Ajax で使用したいと考えています。

次の送信コードを見てください。

var editQuestionFormSubmit = function () {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (result) {
            $('#target2').html(result);
            //$("#editQuestionForm").submit(editQuestionFormSubmit);
        }
    });
    return false;
};

var editQuestion = function () {
    $.ajax({
        url: this.href,
        type: "get",
        success: function (result) {
            $("#target2").html = result;
            $("#editQuestionForm").submit(editQuestionFormSubmit);
        }
    });
    return false;
};

このeditQuestion関数は、ユーザーがハイパーリンクをクリックしたときに初めて実行されます。結果にはフォームが含まれているため、送信イベントを設定しました。

ここで、ユーザーが投稿を行ったときに、それが検証されていないと想像してみましょう。同じフォームを現在のモデルでもう一度表示します。

    public ActionResult EditQuestion(QuestionTemplate qt)
    {
        if (ModelState.IsValid)
        {
           ....
           return ...
        }

        return PartialView("_EditQuestion", qt);
    }

したがって、最後のコードは同じフォームを返しますが、検証するエラーを表示し、再度送信イベント ハンドラーを登録する必要があります。私は良いアプローチをしていますか、それとも各コールバックに各イベントハンドラーを登録しないためのより良い方法がありますか?

4

1 に答える 1

0

ダーフ、

イベントの場合submit、イベントはバブルしないため、祖先要素に処理を委譲することはできません。これは、動的に追加された要素から発生するイベントを処理するための最初の選択肢のアプローチを否定します。

したがって、検証へのアプローチではsubmit、フォームが置き換えられるたびにイベント ハンドラーをアタッチする必要があります。

ただし、フォームのコンテンツ(その.html()) のみを置き換え、元のハードコードされ<form>た要素をドキュメント内に残して、その必要を回避できるはずです。

于 2013-03-05T01:28:30.857 に答える