Установите флажки для доступа к Dojo через JavaScript
Я пытаюсь получить доступ к некоторым diji.form.checkBoxes из javascript, чтобы найти эти флажки, которые были проверены пользователем. Мой код ниже. Если бы я использовал прямой 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>
3 ответа
Во-первых, рекомендуется использовать data-dojo-type вместо устаревшего 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, используйте виджет.
Как сказал Роман, ты должен идти с 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 checked\n" : "") + (checkbox2.checked ? "2 checked" : ""));
</script>
</button>
</body>
</html>
Dojo отслеживает все зарегистрированные виджеты. Вы можете получить доступ к ним через dijit / registry по id или domnode. Например, если вы поместите идентификатор в ваш содержащий элемент:
<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
});
Если вы сами поместите идентификаторы в диджиты так:
<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/checkbox в вашем распоряжении.