3

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>

どうした?誰でも?

4

2 に答える 2

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;
        }
    }
}

デモ

ソースコード-関連コード:

.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);
    }
});
于 2013-02-15T06:29:54.890 に答える
0

次のようなものを使用できます。

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

これは Chrome、IE、Firefox で動作します。

于 2015-01-27T01:35:25.373 に答える