这就是我在jsp页面中声明Number Spinnner元素的方法
<table width="40%">
<tr>
<td class="proplabel"><label for="tTestDuration">Test Duration</label></td>
<td><input data-dojo-type="dijit/form/NumberSpinner" id="tTestDuration" value="60" data-dojo- props="smallDelta:1, constraints:{min:1,max:600,places:0},required:true" name="testDuration" />(Seconds)</td>
</tr>
<tr class="spacer"><td> </td></tr>
<tr>
<td class="proplabel"><label for="tTestMinFrameRate">Minimum Frame Rate</label></td>
<td><input data-dojo-type="dijit/form/NumberSpinner" id="tTestMinFrameRate" value="1" data-dojo- props="smallDelta:1, constraints:{min:1,max:10000,places:0},required:true" name="initialRate" />(Mbps)</td>
</tr>
<tr class="spacer"><td> </td></tr>
<tr>
<td class="proplabel"><label for="tTestMaxFrameRate">Maximum Frame Rate</label></td>
<td><input data-dojo-type="dijit/form/NumberSpinner" id="tTestMaxFrameRate" value="100" data-dojo- props="smallDelta:1, constraints:{min:1,max:10000,places:0},required:true" name="maximumRate"/>(Mbps)</td>
</tr>
<tr class="spacer"><td> </td></tr>
<tr>
<td class="proplabel"><label for="tTestStepSize">Step Size</label></td>
<td><input data-dojo-type="dijit/form/NumberSpinner" id="tTestStepSize" value="5" data-dojo- props="smallDelta:1, constraints:{min:1,max:100,places:0},required:true" name="stepRate" />(Mbps)</td>
</tr>
<tr class="spacer"><td> </td></tr>
<tr>
<td class="proplabel"><label for="tTestAcceptableLoss">Acceptable Loss</label></td>
<td><input data-dojo-type="dijit/form/NumberSpinner" id="tTestAcceptableLoss" value="0" data-dojo- props='smallDelta:1, constraints:{min:0,max:10,places:0},required:true' name="acceptableLoss" />(%)</td>
</tr>
</table>
在我的脚本中,我使用dojo.query获取nodeList,然后获取节点名称和值。 使用这些节点名称和值,构造一个要发送给服务器的对象。
我的问题是我无法获取节点名称,名称显示为空,我使用console.log()和alert()检查但是能够获取节点id和节点值
这是我用来查询的脚本
尝试使用 domAttr,dojo.attr ......对我没用
请告诉我如何获取name属性
即使是简单的**document.getElementById(node.id).name**
也无效
供参考:
我正在使用dojo版本1.8.4
<script>
require([
"dojo/parser",
"dijit/form/CheckBox",
"dijit/form/NumberSpinner",
"dijit/form/Form",
"dijit/form/Button",
"dojo/dom",
"dojo/query",
"dojo/dom-attr",
"dojo/domReady!"
], function(parser,domAttr){
parser.parse();
});
</script>
<script>
function myOnClick(jsonObj){
if(document.getElementById("tt").checked){
var tt = new Object();
tt['name'] = "Throughput_"+jsonObj['profileName'];
tt['frameSize'] = frameSize;
require(["dojo/dom-attr", "dojo/dom"], function(domAttr, dom){
dojo.query('input[id^="tTest"]').forEach(function(node, index, arr){
alert(" ----"+node.id+" --"+dojo.byId(node.id).name);
tt[domAttr.getNodeProp(node.id,"name")] = node.value;
});
});
alert(JSON.stringify(tt));
jsonObj['throughputTest'] = tt;
}
}
</script>
感谢您的支持
答案 0 :(得分:2)
您应该知道,当您使用像dijit/form/NumberSpinner
这样的Dijits时,您的HTML标记会被处理并转换为其他内容(=小部件)。
一旦解析,您的dijit/form/NumberSpinner
会将名称属性放在隐藏字段上,将ID属性放在另一个字段上,这意味着它们在同一元素上不再可用。
>
使用小部件时,您不应再依赖HTML标记。
然而,您可以使用dijit/registry
模块获取窗口小部件并使用它。例如,以下内容将起作用:
registry.byId("tTestDuration").name; // Returns "testDuration"
要获取表格中所有小部件的名称,您可以使用dijit/registry::findWidgets()
方法,例如:
var widgets = registry.findWidgets(query("table")[0]); // Find widgets inside the table
var names = array.map(widgets, function(widget) {
return widget.name;
});
这将首先检索所有窗口小部件对象,然后将它们映射到仅包含窗口小部件名称的新数组。
看看以下JSFiddle:http://jsfiddle.net/6EQ75/