无法使用Dojo获取name属性

时间:2014-07-09 06:07:09

标签: javascript dojo

这就是我在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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>

感谢您的支持

1 个答案:

答案 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/