我在sharepoint中创建一个表单。我有一个文本框的ms-FormBody。我希望用户能够双击该框以展开该框,如果他们再次双击,它将缩小回来。这也是在SharePoint中。
编辑:感谢@Thriggle的一些帮助,我非常接近我想要的这个项目的目标。现在的问题是,无论你输入的是什么,只会留在一条线上(可能是外包裹?)。文本框实际上并没有占用更少的空间(这不是什么大不了的事,但如果你能想到的话,随着这个盒子调整大小,其余的盒子也会移动)我想知道是否有办法程序启动时盒子会很小。答案 0 :(得分:1)
根据您的屏幕截图,我假设您正在使用Nintex Forms。
对于纯文本多行字段
以下内容适用于纯文本多行字段,但不适用于富文本或增强的富文本字段(两者都不是由普通的textarea元素表示)。
在表单设置的“自定义JavaScript”部分中,您可以添加以下代码:
ExecuteOrDelayUntilScriptLoaded(function(){setTimeout(checkFieldExists,1000);},"sp.js");
function checkFieldExists(){
// Nintex forms load slowly; we'll hold off on running the code
// until we're able to access the element through the DOM.
var field = document.getElementById(DescriptionID);
if(field){
// The field exists, time to attach an event listener.
addExpansionToggleEvent(field);
}else{
// Wait a second, then check again.
setTimeout(checkFieldExists,1000);
}
}
function addExpansionToggleEvent(field){
field.style.height = ""; // remove the default height=100%
field.ondblclick = function(){
var rows = field.getAttribute("rows");
field.setAttribute("rows",+rows < 10 ? 10 : 1);
};
}
这假设您将DescriptionID
的客户ID添加到要切换的纯文本多行字段中,如屏幕截图所示。
对于富文本多行字段
富文本字段(奇怪地)由iframe代替textarea
元素。
可以将以下代码添加到“自定义JavaScript”部分,以便在双击富文本字段时提供扩展/收缩行为,但请注意,这不会重新调整窗体上其他控件的布局方式以解释领域的新规模...所以它并不是特别有用。
ExecuteOrDelayUntilScriptLoaded(function(){setTimeout(checkFieldExists,1000);},"sp.js");
function checkFieldExists(){
var iframes = document.querySelectorAll("iframe[title=\"Rich Text Editor\"]");
if(iframes.length > 0){
addExpansionToggleEvent(iframes);
}else{
setTimeout(checkFieldExists,1000);
}
}
function addExpansionToggleEvent(iframes){
for(var i = 0, len = iframes.length; i < len; i++){
var body = iframes[i].contentDocument.querySelector("body");
(function(container){
body.ondblclick = function(){
container.height = +(container.height) < 140 ? 140 : 30;
};
})(iframes[i]);
}
}
同样,此代码专门针对富文本字段,不适用于纯文本或增强的富文本字段。