条件设置字段作为SharePoint编辑表单中的只读问题

时间:2014-04-07 08:59:36

标签: javascript jquery sharepoint

我有一个SharePoint列表,它包含一个“标题”字段作为单行文本,一个“冻结”字段作为复选框。

在编辑表单中,当我选中“冻结”时,我希望“编辑表单”中的“标题”字段为只读。

我尝试将以下java脚本代码放在“内容编辑器Web部件”中,并且它在一定程度上起作用,存在以下问题:

  1. 字段“标题”仍然显示为“可编辑”字段
  2. 由于“标题”是编辑表单中的第一个字段,因此光标焦点始终位于此字段的第一个位置,并且此字段在第一个位置是“可编辑的”,直到我将光标焦点移动到另一个字段,并返回“标题”字段,然后“标题”字段为只读。
  3. 对于问题1,我在下面添加了一行,将该字段显示为“只读”字段。

    ele[index].className = "ms-HoverCellInActive";
    

    对于问题2,除非我将“标题”字段作为表单中的第二个字段 - 这使得表单有点难看,我无法将其设置为“只读”。

    有什么建议吗?

    代码:

    <script type="text/javascript">
    
    function MakeReadOnly(){
      var elm=document.body.getElementsByTagName("input");
      for (index=0; index < elm.length; ++index) {
        if(elm[index].type=="checkbox"){
          if(elm[index].title=="Frozen"){
            var iFz=index;
            break;  
          }
        }
      }
    
      var ele=document.body.getElementsByTagName("input");
      for (index=0; index < ele.length; ++index) {
        if(ele[index].type=="text"){
          if(ele[index].title=="Title"){
            if(elm[iFz].checked){
              ele[index].readOnly=elm[iFz].checked;
              ele[index].className = "ms-HoverCellInActive";
              break;
            }
          }
        }
      }
    }
    
    _spBodyOnLoadFunctionNames.push("MakeReadOnly");
    </script>
    

3 个答案:

答案 0 :(得分:0)

我可能会在禁用输入元素时使用disabled =“disabled”,但我相信你也可以使用setAttribute(“readOnly”,“true”)。

ele[index].setAttribute("disabled", "disabled");

答案 1 :(得分:0)

使用jquery

尝试此操作
$(document).ready( function () {        
        $("input[name='Frozen']").prop("checked","true");   
        $("input[name='title']").attr("disabled","disabled");
    });

答案 2 :(得分:0)

我强行关注另一个领域,这解决了问题2.

elm[iFz].focus();

顺便说一句,我不能使用&#34;禁用&#34;属性是,当你点击&#34;标题&#34;的值时字段丢失,更糟糕的是,如果&#34;标题&#34;字段设置为&#34;要求此列包含信息&#34;,您无法保存条目。

完整的代码如下,

<script type="text/javascript">

function MakeReadOnly(){
  var elm=document.body.getElementsByTagName("input");
  for (index=0; index < elm.length; ++index) {
    if(elm[index].type=="checkbox"){
      if(elm[index].title=="Frozen"){
        var iFz=index;
        break;
      }
    }
  }

  var ele=document.body.getElementsByTagName("input");
  for (index=0; index < ele.length; ++index) {
    if(ele[index].type=="text"){
      if(ele[index].title=="Title"){
        if(elm[iFz].checked){
          ele[index].readOnly=elm[iFz].checked;
          ele[index].className = "ms-HoverCellInActive"; //set the read only look and feel
          elm[iFz].focus();     // set focus to another field
          break;
        }
      }
    }
  }
}

_spBodyOnLoadFunctionNames.push("MakeReadOnly");
</script>