【问题标题】:Highstock date input jquery ui datepicker position changesHighstock 日期输入 jquery ui datepicker 位置变化
【发布时间】:2013-02-21 16:19:44
【问题描述】:

在 Highstock 中,您可以使用 jquery ui datepicker 而不是在日期字段中输入文本,就像在这个演示中一样...http://jsfiddle.net/hcharge/aNde9/

datepicker

单击输入一次,将打开日期选择器,它应该位于输入字段下方,但是如果您关闭它并再次打开它,它就会粘在容器的顶部。在网页中实现,这将是浏览器窗口的顶部。

这是一个已知问题吗?

【问题讨论】:

    标签: javascript jquery jquery-ui highcharts highstock


    【解决方案1】:

    日期选择器通过小部件样式的“顶部”属性控制其垂直位置 - 出于某种原因,在随后的日期选择器激活中,“顶部”始终设置为 0。

    如果我们让小部件的数据“记住”正确的位置并在后续调用中明确设置该位置,那么解决方法相对容易。 请参阅下面的 datePicker 选项中定义的 'onClose' 和 'beforeShow' 函数:

    $.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?', function(data) {
        // Create the chart
        window.chart = new Highcharts.StockChart({
            chart : {
                renderTo : 'container'
            },
    
            rangeSelector : {
                selected : 1,
                inputDateFormat: '%Y-%m-%d',
                inputEditDateFormat: '%Y-%m-%d'
            },
    
            title : {
                text : 'AAPL Stock Price'
            },
    
            series : [{
                name : 'AAPL',
                data : data,
                tooltip: {
                    valueDecimals: 2
                }
            }]
    
        }, function(chart){
    
            // apply the date pickers
            setTimeout(function(){
                $('input.highcharts-range-selector', $('#'+chart.options.chart.renderTo))
                .datepicker({
                    beforeShow: function(i,obj) {
                        $widget = obj.dpDiv;
                        window.$uiDatepickerDiv = $widget;
                        if ($widget.data("top")) {
                            setTimeout(function() {
                                $uiDatepickerDiv.css( "top", $uiDatepickerDiv.data("top") );
                            },50);
                        }
                    }
                    ,onClose: function(i,obj) {
                        $widget = obj.dpDiv;
                        $widget.data("top", $widget.position().top);
                    }
                })
            },0)
        });
    });
    

    这是link to jsFiddle

    【讨论】:

    • 是的,我想我们会试试这个,很遗憾它不能开箱即用,非常感谢
    • 但是当使用多个图表和使用多个数据选择器时,这个解决方案会失败。它始终在同一图表中显示数据选择器,而不是在您单击以显示日期的图表中。查看演示:jsfiddle.net/aNde9/52
    【解决方案2】:

    您需要设置相同的输入格式,因此或将 datepicker 中的 dateFormat 更改为与 Highstock 中的相同,或将 Highstock 中的 inputRangeFormat 更改为。

    【讨论】:

    • 我已经用匹配的格式更新了小提琴,但似乎没有任何区别,这是一个非常奇怪的错误
    • 您的格式有错误 '%Y-&m-%d' 而应该是 '%Y-%m-%d'。见:jsfiddle.net/aNde9/4
    • 我意识到这个错误并更正了它,但它仍然无法按预期工作,你明白我在说什么吗?日期选择器粘在容器顶部...
    • 刚刚意识到,我没有回答你的问题,对不起!是的,现在我可以看到 datepicker 的位置是错误的。
    猜你喜欢
    • 2015-07-18
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多