将所有UI表单设置为只读/禁用?

时间:2017-01-10 05:58:42

标签: javascript html dojo dijit.form

当用户访问权限设置为"只读" 时,我们需要将所有表单输入元素设为readonly

我们在编码中使用基于小部件的模板方法,其中小部件在模板HTML中指定,并在相应的JS文件中使用。

我在JS postcreate方法中尝试使用以下代码:

var item=dojo.query("#showtech_log_title_pane"); // id of the content pane

for (var i=0;i{
   dijit.byId(item[i]).set('readOnly',true);
}
  

错误:dijit by id-> undefined或null

var container = dojo.query("#showtech_log_title_pane");

dojo.query('input', container).forEach(
  function(inputElem){
    inputElem.disabled = 'disabled';
  }
)
  

错误:创建元素而不是方法

1 个答案:

答案 0 :(得分:2)

要禁用窗口小部件,您必须获取对它的引用,并将其disabled属性设置为true。

在您的情况下,您必须遍历所有具有ID的输入(以确保创建的窗口小部件)然后获取输入的小部件并将其设置为禁用

下面是一个工作示例:



require([ "dojo/ready", 
		  "dojo/query",
          "dijit/registry",
          "dojo/_base/array",
		  "dijit/TitlePane", 
		  "dojo/domReady!"],
function (ready, query, registry, array, TitlePane) {
	ready(function(){
      //get all 
      var inputs = dojo.query('input', "enclosing_input_div");
      array.forEach(inputs,function(input){
        //check if a it's a created widget input (all widgets have theire own id )
      	if(input.id)
          if(registry.byId(input.id)) // recheck if it it has enclosing widget
            registry.byId(input.id).set("disabled",true)
      })
    });
});

<link href="https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dijit/themes/claro/claro.css" rel="stylesheet"/>
<script>
    dojoConfig= {
        parseOnLoad: true,
        async: true
    };
</script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>

<body class="claro">
  <div id="enclosing_input_div">
    <div id="tp1" data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'tp1'">
      <table>
        <tr>
          <td>TextField :</td>
          <td><input  data-dojo-type="dijit/form/TextBox"></td>
        </tr>
        <tr>
          <td>NumberTextBox :</td>
          <td><input id="numberTextBox" data-dojo-type="dijit/form/NumberTextBox"></td>
        </tr>
        <tr>
          <td>Checkbox :</td>
          <td><input id="checkBox" data-dojo-type="dijit/form/CheckBox"></td>
        </tr>
        <tr>
          <td>RadioButton :</td>
          <td><input id="radioButton" data-dojo-type="dijit/form/RadioButton"></td>
        </tr>
      </table>
    </div>
  </div>
</body>
&#13;
&#13;
&#13;

Here is also a fiddle