Filtering a dropdown in Angular IE11 issue

Posted by Brian S. on Stack Overflow See other posts from Stack Overflow or by Brian S.
Published on 2014-05-30T03:22:44Z Indexed on 2014/05/30 3:24 UTC
Read the original article Hit count: 490

Filed under:
|
|

I have a requirement for a select html element that can be duplicated multiple times on a page. The options for these select elements all come from a master list. All of the select elements can only show all of the items in the master list that have not been selected in any of the other select elements unless they just were duplicated.

So I wrote a custom filter to do this in Angular and it seems to work just fine provided you are not using IE11. In IE when you select a new item from a duplicated select element, it seems to select the option after the one you selected even though the model still has the correct one set.

I realize this sounds convoluted, so I created a jFiddle example.

Using IE 11 try these steps:

  1. Select Bender
  2. Click the duplicate link
  3. Select Fry
  4. Notice that the one that is selected is Leela but the model still has Fry (id:2) as the one selected

Now if you do the same thing in Chrome everything works as expected.

Can anyone tell me how I might get around this or what I might be doing wrong?

Here is the relevant Angular code:

myapp.controller('Ctrl', function ($scope) {
    $scope.selectedIds = [{}];

    $scope.allIds = [{ name: 'Bender', value: 1},
                     {name: 'Fry', value: 2},
                     {name: 'Leela', value: 3 }];

    $scope.dupDropDown = function(currentDD) {
        var newDD = angular.copy(currentDD);
        $scope.selectedIds.push(newDD);
    }
});


angular.module('appFilters',[]).filter('ddlFilter', function () {
     return function (allIds, currentItem, selectedIds) {


         //console.log(currentItem);
         var listToReturn = allIds.filter(function (anIdFromMasterList) {
                if (currentItem.id == anIdFromMasterList.value)
                    return true;

                var areThereAny = selectedIds.some(function (aSelectedId) {
                    return  aSelectedId.id == anIdFromMasterList.value;
                });
                return !areThereAny;
            });
            return listToReturn;
        }
});

And here is the relevant HTML

<div ng-repeat="aSelection in selectedIds "> 
<a href="#" ng-click="dupDropDown(aSelection)">Duplicate</a>
<select ng-model="aSelection.id" ng-options="a.value as a.name for a in allIds | ddlFilter:aSelection:selectedIds">
<option value="">--Select--</option>
</select>
</div>

© Stack Overflow or respective owner

Related posts about html

Related posts about angularjs