在一个页面上,我有一些我想要“只读”的字段(在我的意思是它们无法访问,但它们会存储值,如果出现问题,请阅读之前的问题......)。
我使用客户端 JS 在页面加载时设置这些属性:
$(".readonly").attr('readonly', true);
如果我对这些字段中的任何一个进行了部分更新,则该属性将丢失并且该字段可访问。
克服这一点并使其发挥作用的最佳做法是什么?
在一个页面上,我有一些我想要“只读”的字段(在我的意思是它们无法访问,但它们会存储值,如果出现问题,请阅读之前的问题......)。
我使用客户端 JS 在页面加载时设置这些属性:
$(".readonly").attr('readonly', true);
如果我对这些字段中的任何一个进行了部分更新,则该属性将丢失并且该字段可访问。
克服这一点并使其发挥作用的最佳做法是什么?
每个部分刷新都有一个绑定到它的 oncomplete 方法。您可以做的是将代码添加到 oncomplete 方法,以便再次将项目设置为只读。另一种更好的方法是不更改客户端属性,而是使用隐藏字段来存储数据。
例如,当您将事件绑定到 Link 控件时,您可以通过单击事件标记上的源窗格来更改 oncomplete 代码。当您浏览属性窗格中的事件部分时,您将看到 onComplete、onError、onStart 属性。您可以在这些属性中添加自己的客户端脚本。
在尝试克服“问题”之前,您应该尝试了解部分刷新的确切作用以及应用程序状态的保存位置。
不幸的是,部分刷新正在用新创建的内容替换当前的 html 内容(或更确切地说是其中的一部分),并且只有具有支持控件的表单字段才会保持状态。
我建议你应该尝试在你想只读的控件上设置只读属性(如果这里有一些逻辑你总是可以使用 ssjs)。
或者,您可以尝试通过使用 csjs 全局变量来保留客户端的状态,但这很难管理。
还有一件事 - 尝试使用技术来解决问题(xpages)并尽量不要使用您不小心知道的东西(jquery)来破解您的方式。
我同意jjtbsomhorst关于使用onComplete
事件的观点。但另一种选择是readonly
通过如下代码设置属性:
var textField:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText1");
var readOnlyAttr:com.ibm.xsp.complex.Attr = new com.ibm.xsp.complex.Attr("readonly", "readonly");
var list:java.util.ArrayList = new java.util.ArrayList();
list.add(readOnlyAttr);
textField.setAttrs(list);
您可以afterPageLoad
在 XPage 事件中调用它。但我真的不知道这是否是最好的方式!