0

我正在尝试从 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>
4

3 回答 3

1

http://jsfiddle.net/yw4pza8p/

首先,建议使用 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事件侦听器,请使用小部件。

于 2014-11-15T06:44:51.357 回答
0

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/checkbox属性和方法

于 2014-11-15T23:16:10.180 回答
0

就像 Roman 说的,你应该用 withdata-dojo-type而不是 old 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>

于 2014-11-15T15:08:58.843 回答