在我的xpages应用程序中,我想控制提交按钮(或禁用属性)的可见性,具体取决于在字段中输入的字符数量(xp:inputText)。
我已经为部分刷新https://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-control实现了xsnippet但是如果我计算输入文本控件中值的长度,那么每个键事件都会出现刷新对话框。
我该如何避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端进行操作?
答案 0 :(得分:2)
如果你真的需要使用客户端 - 服务器往返计算每个键事件的输入文本控件中的值的长度(例如,如果你想确保没有人会破解你的客户端JS),并假设你使用前面提到的XSnippet并且不希望待机对话框出现在每个按键上,这里通常需要做的事情:
执行XSP.partialRefreshPost
时,可以将options
对象作为最后一个函数参数传递。只需在此对象中添加一个属性(如果您已经在其中添加了某些内容)或者使用单个属性创建新对象,则必须类似
XSP.partialRefreshPost('#{id:yourId}', {dontShowDialog: true})
options
对象一直传递到第39行,其中partialrefresh-start
事件已发布并将该对象公开为最后一个元素第137行订阅此活动。在它声明的函数中再添加一个参数,比如
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
现在您可以阅读功能正常的options
根据您的options
参数,使用条件语句创建对话框的两个下一行。整件事情看起来像这样:
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
if (options) {
if (options.dontShowDialog) return;
}
StandbyDialog_Do = true;
StandbyDialog_Started();
});
以上所有内容都是针对使用客户端事件处理程序(submit
属性设置为false
的情况)的情况。如果使用服务器端处理程序,事情会变得有点复杂,因为你不能将任何其他自定义属性传递给最终调用的_partialRefresh
方法。但是,我可以想到一种方法来处理这个:
_partialRefresh
方法之前,CSJS引擎做了一些准备工作,其中一个是为页面上的一些隐藏输入字段设置特定值。这里我们对$$xspsubmitid
字段感兴趣,该字段给出了声明的事件处理程序客户机ID的值。然后,您可以在劫持者XSnippet中读取$$xxpsubmitid
字段的值,如果它包含事件处理程序的ID,则不显示备用对话框。这种方式不太灵活,但应该有效P.S。 Haven没有尝试过上面所写的所有内容,但如果你想尝试失败,我会很高兴进行调查和修复。
答案 1 :(得分:0)
这可以通过客户端脚本完成。无需一直提交数据。
XSP.getElementById('id').hidden=true;