2012-10-03 132 views
1

我正在构建一个使用dojo的配置对话框,以后我需要询问用户输入。对话框中有多行,每行都有相同的格式和标签。这里是我用来构建每一行的html。获取dojo的值NodeList内部元素

html = '<div class="cfgtxtrow"> <label>Label:</label> 
<input id="mac" type="hidden" name="mac" value="'+mac+'"/> 
<input id="label" type="text" maxlength="6" name="label" value="'+labl+'"/> 
</div>'; 

这部分的所有作品,我可以看到在Firebug返回数据。

我需要解析这些值并最终使用xhr将它们发送到服务器。所以我认为我可以使用dojo查询来获取节点列表并遍历每个节点以获取输入值并构建要发送的关联数组。我认为这很像通过编程验证值。 (使用dojo.query(“。cfgtxtrow”)。forEach(function(node)),但无法弄清楚如何以编程方式(使用dojo)获取每个节点上的值。我认为我可以使用dojo.byId或查询Node列表来获取其内部元素,但我只是得到错误回来。

我开始怀疑我的概念都是错误的,因为我认为这将简单。

这里是我结束了..

dojo.query(".cfgtxtrow input").forEach(function(node) 
{ 
    id = dojo.attr(node, "id"); 
    console.debug(node); 

    if(id == "mac") mac = dojo.attr(node, "value"); // since mac comes first this is safe.. 
    if(id == "label") 
    { 
     labl = dojo.attr(node, "value"); 
     console.debug(mac); 
     console.debug(labl); 
     macLabels[mac] = labl; 
    } 
}); 
console.debug(macLabels[mac]); 
// send the data via the xhrPut call.. 

我认为它应该是简单的,dojo.attr调用似乎做的工作..

有没有更好的方式来做同样的事情?

回答

0

首先,您不应该使用id属性来标识多行。在html文档中只能有一个具有特定id的dom节点。也许这是你的问题的开始?

所以,如果你改变你的HTML如下:

<div class="cfgtxtrow"> <label>Label:</label> 
<input class="mac" type="hidden" name="mac" value="macValue"/> 
<input class="label" type="text" maxlength="6" name="label" value="labelValue"/> 
</div>​ 

在其上运行此(快速&脏)代码

​require(['dojo/query'],function(query) { 
    var macLabels = {}; 
    query('.cfgtxtrow').forEach(function(row) { 
     var mac = query('.mac', row)[0].value; 
     var label = query('.label', row)[0].value; 
     macLabels[mac] = label; 
    }); 
    console.log(macLabels); 
});​​​​​​​​​ 

将输出这个对象上的控制台日志:{macValue:“ labelValue“}