我是javascript,dojo和HTML的新手,我到处搜索了这个例子并找不到。
我有一个包含一些特征点和一个查找任务的地图,以突出地图上的特征点,并将其显示在带有它的字段属性的网格中。当我将搜索字段指定为:
时,这很有用findParams.searchFields = ["LOCATION"];
但如果我补充:
findParams.searchFields = ["LOCATION", "MODEL_NUM"];
网格显示来自多个字段的结果(即,在LOCATION&#34中搜索属性; A"还会在MODEL_NUM中找到包含字母" A")的属性。所以我决定添加一个下拉菜单选择以指定要搜索的字段(一次一个),以便结果更精确。
所以我添加了以下dijit:
<select id="fieldSelect" data-dojo-type="dijit/form/Select" name="fieldSelect">
<option value="" selected="selected">Select a field</option>
<option value="MODEL_NUM">Model Number</option>
<option value="LOCATION">Location</option>
<option value="NUM_DEFICIENCIES">Number of Deficiencies</option>
<option value="INSTALL_DATE">Install Date</option>
</select>
然后我将搜索字段语句修改为:
findParams.searchFields = "[" + "\"" + dom.byId("fieldSelect").value +
"\"" + "]";
当我点击我的搜索按钮时,我得到一个Uncaught TypeError:a.join不是一个函数(FindParameters.js:5)
我希望这是足够的信息。有人有解决方案或推荐吗?
更新
在建议将数组而不是字符串传递给findParams.searchFields之后,我做了以下更改:
findParams.searchFields = [];
findParmas.searchFields.push(dom.byId("fieldSelect").value);
这仍然给了我多个字段的属性结果。经过几个小测试后:
var selectedField = document.getElementById('fieldSelect').value;
var index = selectedField.options[selectedField.selectedIndex].value;
和
var selectedField = dom.byId('fieldSelect').value;
我发现在Chrome开发者工具调试器中,当我在该行创建断点并执行该语句时,两个示例都将selectedField的值设置为&#39; undefined&#39;。
这是一个没有从下拉列表中选择dijit的值的问题吗?
如果没有值传递给findParams.searchFields,则API会假定所有字段都有效,这就是我从多个字段获取属性结果的原因。
感谢。
答案 0 :(得分:0)
使用dijit.byId
代替dom.byId
。
以下适用于我:
var value = dijit.byId("fieldSelect").value;
if ("" != value) {
findParams.searchFields = [value];
} else {
findParams.searchFields = ["MODEL_NUM", "LOCATION", "NUM_DEFICIENCIES", "INSTALL_DATE"];
}
答案 1 :(得分:0)
我发现了问题。
最终是registry.byId
引导我得到了答案,在我意识到searchFields
处于错误的功能而不是在我点击时调用的函数中时,我不得不重新安排一些代码搜索按钮。
但是当访问dijit时,唯一可行的是registry.byId
来访问dijit节点并将所选值的值传递给我的searchFields。
感谢。