1

在 Firefox 中开发 Web 地图应用程序后,我在 Internet Explorer(公司标准)中测试了我的代码,发现 dijit/form/Select 在使用最新的 Esri JavaScript v3.7 时行为异常。

我看到的问题是,使用 v3.7 时,选择不会从列​​表中的第一个选项更新/更改。如果我将版本降低到 3.6,它会按预期工作。

我已经尝试了从 7 到 10 的 IE 浏览器模式,并且在所有这些模式之间都遇到了相同的行为。有人可以确认他们正在经历同样的事情吗?

3.7 中的示例 - http://jsbin.com/aVIsApO/1/edit

3.6 中的示例 - http://jsbin.com/odIxETu/7/edit

代码块

    var url = "http://services.arcgis.com/V6ZHFr6zdgNZuVG0/ArcGIS/rest/services/Street_Trees/FeatureServer/0";
var frmTrees;
require([
    "esri/tasks/query",
    "esri/tasks/QueryTask",
    "dojo/dom-construct",
    "dijit/form/Select",
    "dojo/parser",
    "dijit/registry",
    "dojo/on", 
    "dojo/ready",
    "dojo/_base/connect",
    "dojo/domReady!"
], function(
   Query,
    QueryTask,
    domConstruct, 
    Select,
    parser,
    registry,
    on,
    ready,
    connect
) { 

    ready(function() {

        frmTrees = registry.byId("trees");

        var qt = new QueryTask(url);
        var query = new Query();
        query.where = "FID < 25";
        query.orderByFields = ["qSpecies"];
        query.returnGeometry = false;
        query.outFields = ["qSpecies", "TreeID"];
        query.groupByFieldsForStatistics = ["qSpecies"];
        //query.returnDistinctValues = true;
        qt.execute(query, function(results) {
            //var frm_domain_area = dom.byId("domain_area");
            var testVals = {};

            for (var i = 0; i < results.features.length; i++) {
                var id = results.features[i].attributes.TreeID;
                var desc = results.features[i].attributes.qSpecies;
                if (!testVals[id]) {
                    testVals[id] = true;
                    var selectElem = domConstruct.create("option",{ label: desc + " (" + id + ")", value: id });
                    frmTrees.addOption(selectElem);
                }
            }
        });

        frmTrees.on("change", function() {
            console.debug(frmTrees.get("value"));
        });
    });

});    
4

1 回答 1

1

与其创建一个 DOM 元素并将其传递给 dijit/form/Select.addOption,不如传递一个带有标签和值属性的简单对象:

qt.execute(query, function(results) {
    //var frm_domain_area = dom.byId("domain_area");
    var testVals = {};

    for (var i = 0; i < results.features.length; i++) {
        var id = results.features[i].attributes.TreeID;
        var desc = results.features[i].attributes.qSpecies;
        if (!testVals.hasOwnProperty(id)) {
            testVals[id] = true;
            var label = desc + " (" + id + ")";
            frmTrees.addOption({label: label, value: id});
        }
    }
});

工作示例(在本地复制,这在 IE8 中有效,但在 jsbin 上的 IE8 中无效):http: //jsbin.com/eKULIgu/1/edit

于 2013-10-23T15:50:16.913 回答