一尘不染

动态更改选项时如何解决IE选择问题

angularjs

我有一组选择,所有选择都有相同的选项。然后,我通过过滤器运行这些选项,以便在其他选择中选择的任何选项都不会显示在选择中。请参阅此jsFiddle(在非IE浏览器中)以了解我的意思。基本上,我防止在选择中多次选择同一选项

现在,我所做的事情在IE中有问题。在IE中打开小提琴(我只在IE9中尝试过,但是我猜以前的版本有相同的问题)。将最后一个选择更改为AAA。请注意,其他三个选择如何改变了它们的显示。它们的模型没有更改,但是当更改选项时,IE会以某种方式窒息。

我的问题是首先,我总体上是否对该功能做错了?相同的代码完全可以满足我在Chrome和FF中的需求,但是我在做我不应该做的事情吗?第二,如何在IE中解决这个问题?我尝试了一些超时操作,这些超时操作会清除并重新设置模型,但是明显的事情发生了。我想知道是否有一个好的,干净的,低影响的解决方法。

任何帮助将非常感激。谢谢。

-更新-

Angular本身已使用以下ASRanjan解决方案在1.3.3版中对此进行了修复。参见1.3.3的新提琴:http
:
//jsfiddle.net/m2ytyapv/

//dummy code so I can post the edit

阅读 178

收藏
2020-07-04

共1个答案

一尘不染

我终于想出了适合我需要的解决方案。基本上,似乎正在发生的事情是所选索引处的选项文本指向该位置以前的旧字符串。我相信更改此文本会更新字符串和/或引用。我做了这样的事情:

angular.forEach($("select"), function (currSelect) {
     currSelect.options[currSelect.selectedIndex].text += " ";
});

这是更新的小提琴:http :
//jsfiddle.net/H48sP/35/

在我的应用程序中,我有一个指令来选择这些元素,所以我这样做element.find("select")不是$("select")在限制元素选择的范围。文本被强制刷新,因此在所有摘要周期运行后,其将正确显示。

如果您遇到了同样的问题,则可能需要$timeout在小提琴中添加一个赞,并且/或者如果以后出现问题,则可能需要稍后删除添加到选项文本中的多余空间。

2020-07-04