JQuery事件保存用户的输入

时间:2013-01-18 14:23:36

标签: jquery asp.net events controls focusout

我试图在点击页面上的另一个控件后保存用户的输入。我看了一下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调用吗?

2 个答案:

答案 0 :(得分:1)

blur事件不会给你你想要的行为吗?

另外,你看过委托活动了吗?使用委派方法,您可以使用单个事件处理程序来处理由多个元素引发的事件。因此,如果您有一个包含10,000个单元格的表,并且您希望在单击时执行某些操作,而不是将事件处理程序附加到每个单元 - 这对性能而言代价很高 - 我们将一个事件处理程序附加到委托处理的表中所有活动。

因此,遵循此范例,您可以始终为表单处理单个事件处理程序,该表单处理该表单中的每个输入。

$("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();

});

答案 1 :(得分: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次或问题就可以解决问题。

我希望这会对你有所帮助。