1

ユーザーがページ上の別のコントロールをクリックした後、ユーザーの入力を保存しようとしています。focusoutイベントを確認しましたが、ユーザーが値を入力するか、別のコントロールを選択するたびに発生します。これが私がそれをどのように使用したかです:

        $('#txt_ComplainingAbout').focusout(function (e) {
             $.ajax({
                    type: "POST",
                    url: "Form.aspx/Save",
                    data: "{'id': '" + this.value + "','value': '" + this.value + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",

                    success: function (msg) {
                        if (msg.d == 'success') {

                        }
                    }

                });
            e.preventDefault();
        });

コントロールごとに上記のajax呼び出しを呼び出す他の方法はありますか?

4

2 に答える 2

1

イベントはあなたblurにあなたが望む行動を与えませんか?

また、委任されたイベントを見たことがありますか?委任されたアプローチでは、単一のイベントハンドラーを使用して、複数の要素によって発生したイベントを処理します。したがって、10,000セルのテーブルがあり、すべてのセルにイベントハンドラーをアタッチするのではなく、クリック時に何らかのアクションを実行したい場合は、パフォーマンスにコストがかかりますが、処理を委任されたテーブルに1つのイベントハンドラーをアタッチします。すべてのイベント。

したがって、このパラダイムに従うと、フォームのすべての入力を処理するフォームに対して、常に単一のイベントハンドラーを持つことができます。

$("form").on("blur", ":input", function(e) {
    // this refers to whichever form element triggered the event
    var $this;

    $.ajax({
        type: "POST",
        url: "Form.aspx/Save",
        data: "{'id': '" + $this.attr("id") + "','value': '" + $this.val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function (msg) {
            if (msg.d == 'success') {

            }
        }

    });

    e.preventDefault();

});
于 2013-01-18T14:32:23.530 に答える
0

以下のようなものを試してください。

 $('#txt_ComplainingAbout').unbind('focusout').bind('focusout', function (e) {

    //your code
    return false; //to prevent the browser actually following the links!

});

説明

focusout(function() {}メソッドはのショートカットです.bind('focusout', handler)

詳細については、.focusout()を確認してください。

上記の方法(unbind/bind)を使用すると、ボタンを2回クリックしたときの問題や、自分が持っている問題などを整理できます。

これがお役に立てば幸いです。

于 2013-01-18T14:32:04.177 に答える