diff --git a/examples/modify-features.js b/examples/modify-features.js
index c3ef96c9c9..bec884a647 100644
--- a/examples/modify-features.js
+++ b/examples/modify-features.js
@@ -92,13 +92,14 @@ var vector = new ol.layer.Vector({
})
});
-var selectInteraction = new ol.interaction.Select({
- layerFilter: function(layer) { return layer.get('id') == 'vector'; }
+var select = new ol.interaction.Select({
+ layers: [vector]
});
+var modify = new ol.interaction.Modify();
+
var map = new ol.Map({
- interactions: ol.interaction.defaults().extend(
- [selectInteraction, new ol.interaction.Modify()]),
+ interactions: ol.interaction.defaults().extend([select, modify]),
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
diff --git a/examples/select-features.js b/examples/select-features.js
index 09166ff064..5e487ab494 100644
--- a/examples/select-features.js
+++ b/examples/select-features.js
@@ -47,12 +47,12 @@ var vector = new ol.layer.Vector({
})
});
-var selectInteraction = new ol.interaction.Select({
- layerFilter: function(layer) { return layer.get('id') == 'vector'; }
+var select = new ol.interaction.Select({
+ layers: [vector]
});
var map = new ol.Map({
- interactions: ol.interaction.defaults().extend([selectInteraction]),
+ interactions: ol.interaction.defaults().extend([select]),
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc
index e107198442..5669bbb55f 100644
--- a/src/objectliterals.jsdoc
+++ b/src/objectliterals.jsdoc
@@ -395,8 +395,8 @@
* modifier (e.g. shift key) that determines if the interaction is active
* (i.e. selection occurs) or not. By default, a click with no modifier keys
* toggles the selection.
- * @property {undefined|function(ol.layer.Layer):boolean} layerFilter Filter
- * function to restrict selection to a subset of layers.
+ * @property {undefined|Array.
|function(ol.layer.Layer):boolean} layers
+ * Layers or filter function to restrict selection to a subset of layers.
* @todo stability experimental
*/
diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js
index eafea029ed..41ecf96085 100644
--- a/src/ol/interaction/selectinteraction.js
+++ b/src/ol/interaction/selectinteraction.js
@@ -1,6 +1,7 @@
goog.provide('ol.interaction.Select');
goog.require('goog.array');
+goog.require('goog.asserts');
goog.require('ol.Feature');
goog.require('ol.events.ConditionType');
goog.require('ol.events.condition');
@@ -34,12 +35,19 @@ ol.interaction.Select = function(opt_options) {
this.addCondition_ = goog.isDef(options.addCondition) ?
options.addCondition : ol.events.condition.shiftKeyOnly;
+ var layerFilter = options.layers;
+ if (!goog.isDef(layerFilter)) {
+ layerFilter = goog.functions.TRUE;
+ } else if (goog.isArray(layerFilter)) {
+ layerFilter = function(layer) {return options.layers.indexOf(layer) > -1;};
+ }
+ goog.asserts.assertFunction(layerFilter);
+
/**
- * @type {null|function(ol.layer.Layer):boolean}
+ * @type {function(ol.layer.Layer):boolean}
* @private
*/
- this.layerFilter_ = goog.isDef(options.layerFilter) ?
- options.layerFilter : null;
+ this.layerFilter_ = layerFilter;
goog.base(this);
};
@@ -53,10 +61,8 @@ ol.interaction.Select.prototype.handleMapBrowserEvent =
function(mapBrowserEvent) {
if (this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
- var layers = map.getLayerGroup().getLayersArray();
- if (!goog.isNull(this.layerFilter_)) {
- layers = goog.array.filter(layers, this.layerFilter_);
- }
+ var layers = goog.array.filter(
+ map.getLayerGroup().getLayersArray(), this.layerFilter_);
var clear = !this.addCondition_(mapBrowserEvent);
var that = this;
diff --git a/test/spec/ol/interaction/selectinteraction.test.js b/test/spec/ol/interaction/selectinteraction.test.js
index cedd9211f1..5c412af9dd 100644
--- a/test/spec/ol/interaction/selectinteraction.test.js
+++ b/test/spec/ol/interaction/selectinteraction.test.js
@@ -30,7 +30,7 @@ describe('ol.interaction.Select', function() {
vector = new ol.layer.Vector({source: new ol.source.Vector({})});
vector.addFeatures(features);
select = new ol.interaction.Select({
- layerFilter: function(layer) { return layer === vector; }
+ layers: [vector]
});
map.getInteractions().push(select);
});