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 个单元格的表格,并且您希望在单击时执行一些操作,而不是为每个单元格附加一个事件处理程序(这会提高性能),我们将一个事件处理程序附加到委派处理的表格所有事件。

因此,按照这种范式,您总是可以为一个表单提供一个事件处理程序来处理该表单中的每个输入。

$("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 回答