event.ctrlKey适用于IE和Chrome,但不适用于legendItemClick上的Firefox

时间:2013-02-15 05:27:52

标签: javascript firefox highcharts

构建一个功能,取消选择除按住Ctrl键的项目之外的所有项目。它适用于IE和Chrome,但不适用于Firefox 在http://jsfiddle.net/PJVK3/

尝试jsfiddle

试图用简单的javascript代码捕获相同的事件,并发生同样的问题。 这适用于Chrome(24.0.1312.57)和IE(9),但不适用于Firefox(18.0.2):

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
if (event.ctrlKey){document.getElementById("demo").innerHTML="ctl key pressed";}
if (!event.ctrlKey){document.getElementById("demo").innerHTML="ctl key NOT pressed";}
}
</script>
</head>
<body>
<p>Click the button to trigger a function.</p>
<button onclick="myFunction()">Click me</button>
<p id="demo"></p>
</body>
</html>

Whatup?任何人吗?

2 个答案:

答案 0 :(得分:3)

如果您查看源代码,您会看到它将事件存储在event.browserEvent上 这是一个固定的错误:https://github.com/highslide-software/highcharts.com/pull/992

那么,为什么你必须使用event.browserEvent而不是window.event? 很简单,因为Firefox中不存在window.event

legendItemClick: function(e) {
    var visibility = this.visible ? 'visible' : 'hidden';

    if (!e.browserEvent.ctrlKey) {
        if (!confirm('The series is currently '+ 
            visibility +'. Do you want to change that?')) {
            return false;
        }
    }
}

demo

源代码 - 相关代码

.on('click', function (event) {
    var strLegendItemClick = 'legendItemClick',
        fnLegendItemClick = function () {
            item.setVisible();
        };

    // Pass over the click/touch event. #4.
    event = {
        browserEvent: event                  // < -- here is the magic
    };

    // click the name or symbol
    if (item.firePointEvent) { // point
        item.firePointEvent(strLegendItemClick, event, fnLegendItemClick);
    } else {
        fireEvent(item, strLegendItemClick, event, fnLegendItemClick);
    }
});

答案 1 :(得分:0)

你可以使用这样的东西:

                var evtobj = window.event ? event : e;
                if (evtobj.shiftKey) {
                    //do something
                } else {
                   //other things
                }

这适用于Chrome,IE和Firefox。