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。