我正在尝试从javascript访问一些diji.form.checkBoxes,以查找用户已选中的复选框。 我的代码如下。 如果我使用直接的javascript,我会使用getElementsByName并执行for循环以查找选中的复选框。 但是,我需要使用 dojo 执行此操作,并且不确定如何检索选中的复选框。任何帮助将不胜感激
<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>
http://jsfiddle.net/yw4pza8p/
首先,建议使用数据道场类型而不是已弃用的道场类型。
要获取复选框,我们可以简单地通过 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 事件侦听器,请使用小部件。
就像罗曼说的那样,你应该选择data-dojo-type
而不是旧的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 checkedn" : "") + (checkbox2.checked ? "2 checked" : ""));
</script>
</button>
</body>
</html>
Dojo 会跟踪所有注册的小部件。您可以通过 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/复选框属性和方法可供你使用。