【问题标题】:Create Dynamic checkboxes by iterating JSONArray in DOJO通过在 DOJO 中迭代 JSONArray 创建动态复选框
【发布时间】:2015-01-05 10:45:19
【问题描述】:

我是 DOJO 新手,我正在使用 DOJO 1.5.0 版本

我想通过在 DOJO 中迭代 JSONArray 来创建动态复选框。这种动态创建将在特定事件上完成,例如当我们选择一些组合框值时。

例如考虑下面的 JSONArray:

var tempJSONArray = [{role_id = '1', role_name = 'role1'},{role_id = '2', role_name = 'role2'},{role_id = '3', role_name = 'role3'}]

我想显示与角色名称对应的复选框。复选框的标签将是角色名称,值将是 JSON 对象的角色 ID。 我还想在复选框中添加“onChange”事件,因为在此事件中我想使用 role_ids 对服务器进行 Ajax 调用。

感谢您的阅读,如果需要进一步说明,请告诉我。

【问题讨论】:

  • 您需要向我们展示您迄今为止所做的尝试。不费吹灰之力寻求解决方案不会吸引太多答案。
  • 如果您是 DOJO 新手,为什么要使用 1.5.0 版?
  • @ThomasKagan:项目已经使用 1.5.0 版本构建,我是团队的新成员。我需要在现有项目中添加一项功能。谢谢!

标签: javascript checkbox dojo


【解决方案1】:

您可以使用dojo.create() 方法创建DOM 节点,并使用dojo.place() 方法将它们放置在另一个元素中,例如:

var checkbox = dojo.create("input", {
    type: "checkbox",
    value: "1"
});

您可能必须将其包裹在<label> 中以显示文本(您也可以使用dojo.create() 创建)。然后你可以将它们放在一个列表中,例如:

dojo.place(label, "checkboxes");

这会将复选框(或标签)包装在 ID 为 checkboxes 的元素中。所以,如果你现在在一个循环中创建你的复选框,它应该可以工作。

【讨论】:

    【解决方案2】:

    在进行了一些网上冲浪和玩代码之后,我可以编写下面的代码,这对于我的场景来说工作得很好。所以认为这对其他人会有所帮助。

    for ( var i = 0; i < roleJSON.length; i++) {
                            var role = roleJSON[i]; 
                            var tr = dojo.create("tr",{id:"rolebasecheckbox"+i,'class':'rolebasecheckbox'});
                            alert("tr=" + tr);
                            var td= dojo.create("td",{innerHTML:'<input id="roleBaseCb_'+i+'" value="'+role.role_id+'" dojoType="dijit.form.CheckBox" onclick="alert('onclick event')" type="checkbox" /> <label for="roleBaseCb_'+i+'">'+role.role_name+'</label>',align:'center'},tr);
                            alert("td=" + td);
                            if(i==0){
                            alert("i is 0");
                            dojo.place(tr, "roleBaseComboTR", "after");
                            }else{
                                dojo.place(tr, "rolebasecheckbox"+(i-1), "after");  
                            }
                        }
    

    【讨论】:

    • 这确实使用了我提到的工具,dojo.place()dojo.create()。不过,我真的不建议创建这样的 Dijit 小部件。要么通过将它们放置在 HTML 中以声明方式制作它们,要么使用正确的 API 以编程方式制作它们。在 JavaScript 中制作声明式样式的小部件对我来说听起来是错误的。
    • @Dimitri M:是的,感谢您的帮助。首先,我尝试以编程方式制作它们,但它不适用于我的场景,因此我使用上述方式创建了它们。但从下一次开始,我们将尝试或确保以编程方式或声明方式进行。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2018-01-26
    • 2019-01-01
    • 2013-01-25
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多