【问题标题】:JQuery event saving user's input保存用户输入的 JQuery 事件
【发布时间】:2013-01-02 06:45:05
【问题描述】:

一旦用户点击了页面上的另一个控件,我就会尝试保存他们的输入。我查看了 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调用吗?

【问题讨论】:

    标签: jquery asp.net events controls focusout


    【解决方案1】:

    试试下面的方法。

     $('#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 次或您遇到的问题。

    希望对你有帮助。

    【讨论】:

    • 我们确定这真的有效吗?没有解释这实际上在做什么,或者它如何解决这个问题。像这样匆匆忙忙的回答没有帮助或建设性
    • @Sam1 你试过这个还是什么?试着让我知道。然后我会解释这个场景。
    • @Sam1 我已经更新了我的帖子,请检查一下,如果还不够,请告诉我?
    【解决方案2】:

    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();
    
    });
    

    【讨论】:

    • 感谢您的解释....因此,如果按照您的示例我有一个事件,是否有任何文本输入字段在失焦时触发 $.ajax?还有下拉控件怎么样?我需要另一个事件吗?
    • 也尝试你的例子,我得到不是一个功能错误(我正在使用 jquery 1.5.1
    • 正确,这将处理所有输入。更好的是,因为我们使用 jQuery 自定义选择器:input,这也将选择文本区域、选择、复选框等。我不确定blur 是否会触发选择、单选按钮和所有类型的表单输入,所以这个需要您进行一些调查,但这绝对足以让您继续前进
    • 您使用的是哪个版本的 jQuery? on 在 1.7 中作为标准事件处理程序语法引入。如果您卡在较早的版本上,请改为调查delegate。工作方式相同,但方法签名略有不同(如果我没记错的话,前两个参数是交换的)所以查一下
    • 肯定会看看,但现在要测试更新到 1.8.3 ......我在这里看到的唯一问题是,一旦我将焦点从一个控件更改为另一个控件,事件就会触发两次......有什么办法可以防止这种情况发生...我认为它发生在我正在更改的控件和新控件的一次...
    猜你喜欢
    • 2019-03-29
    • 2020-07-19
    • 1970-01-01
    • 2013-06-27
    • 2010-11-21
    • 2016-07-08
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多