2014-11-14 44 views
0

我想从javascript访问一些diji.form.checkBoxes以查找已由用户检查过的复选框。我的代码如下。如果我使用直接JavaScript,我会使用getElementsByName并执行for循环查找复选框。但是,我需要使用dojo来做到这一点,并且我不确定如何检查复选框。任何帮助,将不胜感激访问dojo通过javascript检查复选框

 <tr> 
     <td colspan= "2"> 
      <!-- <input type="checkbox" name="fields" value="InstitutionName" /> College Name --> 
      <input dojotype="dijit.form.CheckBox" name="fields" value="Address"; onKeyUp="dojoFunction();" /> Address 
      <input dojotype="dijit.form.CheckBox" name="fields" value="City"; onKeyUp="dojoFunction();" /> City 
      <input dojotype="dijit.form.CheckBox" name="fields" value="Zip"; onKeyUp="dojoFunction();" /> Zipcode 
      <input dojotype="dijit.form.CheckBox" name="fields" value="Phone"; onKeyUp="dojoFunction();" /> Phone Number 
     </td> 
    </tr> 
    <tr> 
     <td colspan= "2"> 
      <input dojotype="dijit.form.CheckBox" name="fields" value="GeneralURL"; onKeyUp="dojoFunction();" /> General URL 
      <input dojotype="dijit.form.CheckBox" name="fields" value="AdmissionsURL"; onKeyUp="dojoFunction();" /> Admissions URL 
      <input dojotype="dijit.form.CheckBox" name="fields" value="FederalAidURL"; onKeyUp="dojoFunction();" /> Financial AId URL 
      <input dojotype="dijit.form.CheckBox" name="fields" value="ApplicationsURL"; onKeyUp="dojoFunction();" /> Application URL 
     </td> 
    </tr> 
+0

如果您添加您正在使用的Dojo版本,将会很有帮助 – iH8 2014-11-15 03:44:05

回答

1

http://jsfiddle.net/yw4pza8p/

首先,它建议使用数据的dojoType而不是deprecated的dojoType。

为了获得复选框,我们可以简单地通过一个CSS选择器查询:

var fields = query("table input[name='fields']"); 

我们可以遍历这个数组,以确定是否一个复选框被选中。要做到这一点最简单的方法是

fields.forEach(function(field) { 
    var checked = field.checked; 
}); 

或者如果你想获得实际的小部件,是这样的:

fields.forEach(function(field) { 
    var widget = dijit.getEnclosingWidget(field); 
    var checked = widget.get('checked'); 
}); 

如果你需要的是前者,走这一点。但是,如果您需要更多功能,例如onChange事件侦听器,请使用该小部件。

0

像罗曼说的,你应该用而不是旧的dojoType。我会用data-dojo-id直接访问控件:

<html> 
 
<head> 
 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.1/dijit/themes/claro/claro.css"> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.10.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true"></script> 
 
    <script> 
 
    require(["dojo/parser", "dijit/form/CheckBox", "dijit/form/Button"]); 
 
    </script> 
 
</head> 
 

 
<body class="claro"> 
 
    <label>checkbox 1:</label><input name="name1" data-dojo-type="dijit/form/CheckBox" data-dojo-id="checkbox1" /><br/> 
 
    <label>checkbox 2:</label><input name="name2" data-dojo-type="dijit/form/CheckBox" data-dojo-id="checkbox2" /><br/> 
 
    <button data-dojo-type="dijit/form/Button">Display Selected 
 
    <script type="dojo/on" data-dojo-event="click"> 
 
     alert((checkbox1.checked ? "1 checked\n" : "") + (checkbox2.checked ? "2 checked" : "")); 
 
    </script> 
 
    </button> 
 
</body> 
 

 
</html>

+0

您将如何为循环中的'n'个小部件执行此方法? – Taha 2014-11-18 11:44:03

+0

@Taha,据我了解这个问题,我们需要知道哪些复选框被检查,而不是得到它们的数量。此外,该问题指定了8个复选框,并且我的方法允许每个复选框使用不同的逻辑。 – Elad 2014-11-19 12:51:05

0

道场跟踪所有注册的微件。您可以通过id或domnode的dijit/registry访问这些文件。例如,如果你把一个标识符的含元素:

<tr id="container"> 
    <!-- your dijits --> 
</tr> 

你可以使用像这样获取它们:

require([ 
    'dojo/dom', 
    'dijit/registry' 
], function(dom, registry) { 
    var container = dom.byId('container'); 
    var dijits = registry.findWidgets(container); //returns array of dijit instances 
}); 

如果你把标识上的dijits自理这样的:

<input id="dijitFoo" ...> 
<input id="dijitBar" ...> 

你可以用类似这样的东西取它们:

require([ 
    'dijit/registry' 
], function(registry) { 
    var dijitFoo = registry.byId('dijitFoo'); //returns dijit instance 
    var dijitBar = registry.byId('dijitBar'); //returns dijit instance 
}); 

一旦你有了你的dijit实例,你可以简单地检查属性dijit.checked,并且你还可以获得所有常用的dijit /复选框properties and methods

相关问题