为什么jquery插件中的.change()函数不起作用?

时间:2016-07-12 12:24:38

标签: javascript jquery-plugins

我正在尝试制作一个简单的年龄计算器。它只是在输入的一侧添加年龄。它通过datepicker计算输入内的年龄。 .split不是很干净,但只是改变日期格式。

我猜我的问题是范围问题。

我想要的是,我的插件可以更新输入更改的年龄。这是:

 (function ($) {
        $.fn.ageIt = function () {
            var that = this;
            var positonthat = $(that).position();
            var sizethat = $(that).width();

            //Add div for ages
            var option = {
                "position": " relative",
                "top": "0",
                "left": "300"
            };

            var templateage = "<div class='whatage" + $(this).attr('id') + "' style='display:inline-block;'>blablabla</div>";
            $(that).after(templateage);
            var leftposition = (parseInt(sizethat) + parseInt(positonthat.left) + parseInt(option.left));
            var toposition = parseInt(positonthat.top) + parseInt(option.top);

            $('.whatage' + $(this).attr("id")).css(
                {
                    position: 'absolute',
                    top: toposition + "px",
                    left: leftposition + "px",
                    "z-index": 1000,
                }

                ); 

            //uptadateage
            function updateage(myobj) {
                var formateddate = myobj.val().split(/\//);
                formateddate = [formateddate[1], formateddate[0], formateddate[2]].join('/');
                var birthdate = new Date(formateddate);
                var age = calculateAge(birthdate);
                $('.whatage' + $(myobj).attr("id")).text(age + "&nbsp;ans");

            };

            //updateage($(this));
            $(this).on("change", updateage($(this)));

            //
        }
    })(jQuery);

    function calculateAge(birthday) {
        var ageDifMs = Date.now() - birthday.getTime();
        var ageDate = new Date(ageDifMs); // miliseconds from epoch        
        return Math.abs(ageDate.getUTCFullYear() - 1970);
    }

    $("#BirthDate").ageIt();

1 个答案:

答案 0 :(得分:3)

这一行:

updateage()

表示“将'change'事件的处理程序设置为使用参数$(this) 调用函数this的结果。这是一个函数调用。因为你已经在变量that中捕获了updateage()的值,您可以编写 function updateage() { var formateddate = that.val().split(/\//); formateddate = [formateddate[1], formateddate[0], formateddate[2]].join('/'); var birthdate = new Date(formateddate); var age = calculateAge(birthdate); $('.whatage' + $(that).attr("id")).text(age + "&nbsp;ans"); }; ,使其不需要参数:

    $(this).on("change", updateage);

然后设置事件处理程序:

this

请注意,在您正在构建的jQuery附加组件中,$(this)的值将是调用该方法的jQuery对象。您不需要创建新的jQuery对象($(that) this.on("change", updateage); )。所以只需写下来就可以了:

sudo apt-get install python3-setuptools
sudo easy_install3 pip