我正在尝试制作一个简单的年龄计算器。它只是在输入的一侧添加年龄。它通过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 + " 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();
答案 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 + " 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