Javascript 向pickadate添加自定义标头

Javascript 向pickadate添加自定义标头,javascript,jquery,jquery-ui,jquery-plugins,datapicker,Javascript,Jquery,Jquery Ui,Jquery Plugins,Datapicker,我使用AMsul并尝试使用jquery添加自定义标题 它工作得很好,但是当我在一个页面上使用两个数据采集器时,我的自定义标题被添加到第一个页面上两次,这让它看起来很可笑 这是我的js代码: $.extend($.fn.pickadate.defaults, { selectMonths: true, // Creates a dropdown to control month selectYears: 15, // Creates a dropdown of 15 yea

我使用AMsul并尝试使用jquery添加自定义标题

它工作得很好,但是当我在一个页面上使用两个数据采集器时,我的自定义标题被添加到第一个页面上两次,这让它看起来很可笑

这是我的js代码:

    $.extend($.fn.pickadate.defaults, {
    selectMonths: true, // Creates a dropdown to control month
    selectYears: 15, // Creates a dropdown of 15 years to control year,

    onRender: function () {
        var year = $('.datepicker').pickadate('picker').get('highlight', 'yyyy');
        var day = $('.datepicker').pickadate('picker').get('highlight', 'dd');
        var month = $('.datepicker').pickadate('picker').get('highlight', 'mmm');
        var labelday = $('.datepicker').pickadate('picker').get('highlight', 'dddd');
        console.log(year, day, month, labelday);

        $('.picker__header').prepend('<div class="picker__date-display"><div class="picker__weekday-display">' + labelday + '</div><div class="picker__month-display"><div>' + month + '</div></div><div class="picker__day-display"><div>' + day + '</div></div><div    class="picker__year-display"><div>' + year + '</div></div></div>');
    }
});

如何使每个数据采集器始终只添加一个自定义头,即使有多个自定义头?

jQuery prepend方法将预先将您提供给它的内容发送给与选择器匹配的所有元素:

$('.picker\uu头')

这将在每次激发时都能找到的
.picker\uu头
s前加上前缀。通过将其放入渲染回调,每次渲染日期选择器时都会调用它。因此,两次,因为您有两个日期选择器

最好是在只调用一次的回调中预先结束,或者在渲染回调上增加一个计数器。比如:

var dateCounter = 0;

...

onRender: function () {
    dateCounter++;
    if (dateCounter === 2) {
        $('.picker__header').prepend(...
    }
}

但是有很多方法可以做到这一点。也许pickadate.js API中有更优雅的东西?

jQuery prepend方法将预先将您提供的内容发送给与选择器匹配的所有元素:

$('.picker\uu头')

这将在每次激发时都能找到的
.picker\uu头
s前加上前缀。通过将其放入渲染回调,每次渲染日期选择器时都会调用它。因此,两次,因为您有两个日期选择器

最好是在只调用一次的回调中预先结束,或者在渲染回调上增加一个计数器。比如:

var dateCounter = 0;

...

onRender: function () {
    dateCounter++;
    if (dateCounter === 2) {
        $('.picker__header').prepend(...
    }
}

但是有很多方法可以做到这一点。也许pickadate.js API中有更优雅的东西?

非常感谢您的回答。我使用你的代码,它工作得很好,但是当我点击选择日期时,我的自定义标题就消失了,即使我重新点击选择器,也不会再次出现。有办法解决吗?顺便说一句,我试图在amsul文档中找到一些东西,但在花了几个小时没有结果后,我辞职了。听起来单独使用JS会很痛苦。您可能应该考虑创建一个自定义主题:您可以下载完整的未压缩库,并将您自己的主题css添加到文件夹中。我创建了我的自定义主题(这个蓝色标题是我的自定义主题),现在我尝试将它添加到amsul pickadate。问题是,我完全不知道如何通过使用jquery“.prepend”以其他方式完成这项工作,我会使用fork库。看这句话:我要用叉子叉图书馆。据我所知,他们没有一个简单的方法使用API来实现这一点。看这一行:看起来这就是他们创建元素的地方。您可以在那里添加自定义html。。。或者你可以做一个恶心的黑客,把点击处理程序附加到所有的子元素或其他东西上。但不要这样做。非常感谢你们的回答。我使用你的代码,它工作得很好,但是当我点击选择日期时,我的自定义标题就消失了,即使我重新点击选择器,也不会再次出现。有办法解决吗?顺便说一句,我试图在amsul文档中找到一些东西,但在花了几个小时没有结果后,我辞职了。听起来单独使用JS会很痛苦。您可能应该考虑创建一个自定义主题:您可以下载完整的未压缩库,并将您自己的主题css添加到文件夹中。我创建了我的自定义主题(这个蓝色标题是我的自定义主题),现在我尝试将它添加到amsul pickadate。问题是,我完全不知道如何通过使用jquery“.prepend”以其他方式完成这项工作,我会使用fork库。看这句话:我要用叉子叉图书馆。据我所知,他们没有一个简单的方法使用API来实现这一点。看这一行:看起来这就是他们创建元素的地方。您可以在那里添加自定义html。。。或者你可以做一个恶心的黑客,把点击处理程序附加到所有的子元素或其他东西上。但不要那样做。
var dateCounter = 0;

...

onRender: function () {
    dateCounter++;
    if (dateCounter === 2) {
        $('.picker__header').prepend(...
    }
}