部分更新后,DOM对象的更改将丢失

时间:2013-03-26 08:20:08

标签: xpages

在一个页面上,我有一些字段,我想要“只读”(在我的意思是他们无法访问,但他们将存储值,如果问题,请阅读此问题的早期问题...)< / em>的。

我使用客户端JS在页面加载时设置这些属性:

$(".readonly").attr('readonly', true);

如果我对这些字段中的任何一个进行了部分更新,则该属性将丢失,并且该字段可以访问。

克服这个问题并使其发挥作用的最佳做法是什么?

3 个答案:

答案 0 :(得分:3)

每次部分刷新都有一个绑定到它的oncomplete方法。您可以做的是将代码添加到oncomplete方法,以便再次设置项目readonly。另一种更好的方法是不改变属性客户端,而是使用隐藏字段来存储数据。

当您有一个事件绑定到例如Link控件时,您可以通过单击事件标记上的源窗格来更改不完整的代码。当您在属性窗格中浏览事件部分时,您将看到onComplete,onError,onStart属性。您可以在这些属性中添加自己的客户端脚本。

screenshot

答案 1 :(得分:1)

在尝试克服“问题”之前,您应该尝试了解部分刷新的确切方式以及保存应用程序的状态。

不幸的是,部分刷新正在用新创建的内容替换当前的html内容(或者更确切地说是其中的一部分),并且只有具有后备控件的表单字段才会保持状态。

我建议您应该尝试在您想要只读的控件上设置readonly属性(如果这里有一些逻辑,您可以随时使用ssjs)。

可选您可以尝试使用csjs全局变量来保留客户端的状态,但这很难管理。

还有一件事 - 尝试使用该技术来解决问题(xpages)并尝试不使用你不小心知道的东西(jquery)破解你的方式。

答案 2 :(得分:0)

我同意 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);

你可以在XPage的afterPageLoad事件中调用它。但我真的不知道这是否是最好的方式!