【问题标题】:JQuery on event and delegation doesn't work in a jQuery function关于事件和委托的 JQuery 在 jQuery 函数中不起作用
【发布时间】:2015-03-06 03:24:59
【问题描述】:

这不适用于动态填充的元素。该网站是http://bobbygerez.0fees.net/enroll_now。如果您单击添加更多并输入数字,它将不再起作用。

            (function( $ ){
            $.fn.alphaSpace = function(e){
                var arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ";
                var code;
                if (window.event)
                    code = e.keyCode;
                else
                    code = e.which;
                var char = keychar = String.fromCharCode(code);
                if (arr.indexOf(char) == -1){
                    return false;
                }

            }

 $('.sParent').on('keypress', '.siblings_fullname, .siblings_age',  function(e){
               return $(this).alphaSpace(e);
            });

【问题讨论】:

    标签: jquery function delegates


    【解决方案1】:

    问题似乎出在$('.sParent'),在您的代码中,元素.sParent 也是动态创建的。

    即使使用事件委托语法,也应该在事件注册发生时将处理程序添加到 dom 中已经存在的元素。在您的情况下,我认为可以使用元素 #siblingParent

    $('#siblingParent').on('keypress', '.sParent .siblings_fullname, .sParent .siblings_age', function (e) {
        return $(this).alphaSpace(e);
    });
    

    另外我认为你可以简化你的 alphaSpace 方法,因为它不处理任何 dom,你可以将它开发为实用方法,也可以简化

    $.alphaSpace = function (e) {
        // e.which is normalized by jQuery so no need to use e.keyCode
        var char = keychar = String.fromCharCode(e.which);
        //use a simple regex
        return /a-z\s/i.test(char)
    }
    

    然后像这样使用它

    return $.alphaSpace(e);
    

    【讨论】:

    • 是的,也许这就是问题所在,我没有看到它的到来,但感谢代码改进。我会再检查一遍,我会给你一个。
    • $('#siblingParent') 这个解决了我的问题,我使用实用方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 2019-08-02
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多