我在使用小型飞镖应用程序时遇到问题,该应用程序在Chrome和Firefox中运行得非常好......猜猜是什么....不在IE 10和11中(Win10预览中的Project Spartan可以工作!)。
这是一个简单的UI控制逻辑,如下所示:
...
//init elements
SelectElement studyList = querySelector('#studies');
SelectElement roleList = querySelector('#roles');
SelectElement siteList = querySelector('#sites');
ButtonElement createButton = querySelector('#create');
//Kick in the UI logic
_populateStudies();
//UI logic
_populateStudies() {
for (var study in studies) {
OptionElement option = new OptionElement();
option.text = study;
studyList.children.add(option);
}
for (OptionElement element in studyList.children) {
throw new Exception("ADDING_HANDLER");
//执行以下操作,处理程序似乎已附加
element.onClick.listen(_studyClickHandler);
}
}
//从未在IE上执行
_studyClickHandler(Event e) {
siteList.children.clear();
roleList.children.clear();
_populateRoles();
}
_populateRoles(){
List<String> roles = context.getRolesFor(studyList.selectedOptions[0].text);
for (var role in roles) {
OptionElement option = new OptionElement();
option.text = role;
roleList.children.add(option);
}
for (OptionElement element in roleList.children) {
element.onClick.listen(_roleClickHandler);
}
}
...
在IE中,第二个选择框保持为空。 Chrome和Firefox按预期处理代码,根据第一个选择框中选择的元素填充框的子项。 我不知道问题是什么......我重构了处理程序是匿名函数
onClick.listen((_){
handle stuff
});
控制台完全没有错误。 也许有一个简单的解决方案,但我对飞镖相对较新,无法弄明白?
由于
答案 0 :(得分:3)
我想您提到的浏览器click
不支持<option>
处理程序注册。或者,您可以在SelectElement.onChange
上注册回调,并使用以下内容检索所选内容:
import 'dart:html';
void main() {
SelectElement select = querySelector('select');
select.onChange.listen((_) {
final opt = select.options[select.selectedIndex];
print(opt.value);
});
}
您可以使用这些浏览器try it on DartPad。