无法实现ctrl +单击以使用ng-Change在FireFox中的新选项卡中打开

时间:2018-09-16 12:33:38

标签: javascript angularjs

JavaScript

$scope.retrieveSelectedClass = function(newValue, oldValue) {
    fromNgChange = true;
    var windowsEvent = $window;

    if (navigator.userAgent.indexOf("Firefox") != -1) {
        $(window).keydown(function(event) {
            if (event.ctrlKey && fromNgChange) {
                windowsEvent.open('/html/apexEditor.html?name=' + newValue.name, '_blank');
                $scope.selectedName = possibleOldValues[0];
                fromNgChange = false;
                return;
            };
        })
    } else {
        // For chrome
        if (windowsEvent.event.ctrlKey) {
            windowsEvent.open('/html/apexEditor.html?name=' + newValue.name, '_blank');
            $scope.selectedName = possibleOldValues[0];
            return;
        }
    }
};

HTML代码

<select ng-model="selectedName"
        ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}')"
        ng-options="(item.name||item) group by item.groupName for item in names"
        class="code-helper" id="code-helperId">
    <option value="">Select Option</option>
</select>

这里的问题是为firefox ge编写的代码 ts会在我按下ctrl按钮时立即触发,并且错过了ng-change点击。

这在chrome中可以正常使用,但对于Firefox,它不适用于上述代码。 一旦我执行ctrl +从select标记单击,我认为ctrl事件被触发,并且错过了ng-change点击。有任何解决方法吗?

更新

if (windowsEvent.event.ctrlKey) { 
    windowsEvent.open('/html/apexEditor.html?name=' + newValue.name,'_blank'); 
    $scope.selectedName = possibleOldValues[0]; 
    return; 
}

这有效,但仅适用于chrome,所以我也尝试使其在FireFox中起作用。

更新2

我什至尝试通过以下方式传递事件:但是它始终显示为null:

<select ng-model="selectedName" ng-keydown="$event = $event" ng-click="$event = $event" ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', $event)"
            ng-options="(item.name||item) group by item.groupName for item in names"
            class="code-helper" id="code-helperId">
        <option value="">Select Option</option>
</select>

更新2

<div id="container" ng-click="event = $event">
    <select ng-model="selectedName" ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', {{event}})"
            ng-options="(item.name||item) group by item.groupName for item in names"
            class="code-helper" id="code-helperId">
        <option value="">Select Option</option>
    </select>
</div>

这会传递事件,但是事件仅具有click类型,并且无法确定它是否为ctrl + click,因此事件中没有event.ctrlKey。

0 个答案:

没有答案