【问题标题】:Adding a custom header to pickadate将自定义标头添加到pickadate
【发布时间】:2016-10-18 03:15:57
【问题描述】:

我使用 AMsul Pickadate 并尝试使用 jquery 添加自定义标头 .prepend

它工作正常,但是当我在一个页面上使用 2 个数据选择器时,我的自定义标题被添加到第一个页面两次,这让它看起来很荒谬。

这是我的 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>');
    }
});

这是我在一页上使用 2 个数据选择器时的结果:

我的 html 标记如下所示:

<!-- First datapicker-->
        <input placeholder="Selected date" type="text" id="input_from" class="form-control datepicker">

        <!--Second datapicker -->
        <input placeholder="Selected date" type="text" id="input_to" class="form-control datepicker">

我通过 js 初始化选择器:

// Datapicker initialization
        $('.datepicker').pickadate();

我怎样才能让每个数据选择器始终只添加一个自定义标题,即使有多个?

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-plugins datapicker


    【解决方案1】:

    jQuery prepend 方法会将你给它的东西添加到匹配选择器的所有元素:

    $('.picker__header')

    这将添加到.picker__headers,每次触发时都可以找到它。通过将它放在渲染回调中,每次渲染日期选择器时都会调用它。因此,两次,因为您有 2 个日期选择器。

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

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

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

    【讨论】:

    • 非常感谢您的回答。我使用您的代码,它工作正常,但是当我单击选择一个日期时,我的自定义标题会消失并且即使我重新单击选择器也不会再次出现。有没有办法解决它?顺便说一句,我试图在 amsul 文档中找到一些东西,但在花了几个小时没有结果后我辞职了。
    • 这听起来像单独使用 JS 会很痛苦。您可能应该考虑创建一个自定义主题:github.com/amsul/pickadate.js 您可以下载完整的未压缩库并将您自己的主题 css 添加到文件夹中。
    • 但我确实做到了。我创建了我的自定义主题(这个蓝色标题是我的自定义主题),现在我尝试将它添加到 amsul pickadate。问题是我完全不知道如何使用 jquery ".prepend"
    • 我会分叉图书馆。看看这一行:
    • 我会分叉图书馆。据我所知,他们没有一种简单的方法可以使用 API 做到这一点。看看这一行:github.com/amsul/pickadate.js/blob/master/lib/… 看起来这就是他们创建元素的地方。您可以在那里添加您的自定义 html。 ...或者你可以做一个令人作呕的黑客攻击并将点击处理程序附加到所有子元素或其他东西。但不要那样做。
    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 2017-02-15
    • 2016-11-14
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2023-01-02
    • 2018-10-04
    相关资源
    最近更新 更多