xpages-部分刷新-根据输入的字符数隐藏按钮
在我的xpages应用程序中,我希望根据字段(xp:inputText)中输入的字符数控制提交按钮(或禁用属性)的可见性 我已经为部分刷新实现了xsnippet,但是如果我计算输入文本控件中每个键事件出现的值的长度,刷新对话框就会出现xpages-部分刷新-根据输入的字符数隐藏按钮,xpages,xpages-ssjs,Xpages,Xpages Ssjs,在我的xpages应用程序中,我希望根据字段(xp:inputText)中输入的字符数控制提交按钮(或禁用属性)的可见性 我已经为部分刷新实现了xsnippet,但是如果我计算输入文本控件中每个键事件出现的值的长度,刷新对话框就会出现 我怎样才能避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端执行此操作?这可以通过客户端脚本完成。无需一直提交数据 XSP.getElementById('id')。hidden=true这可以通过客户端脚本完成。无需一直提交数
我怎样才能避免这种情况?我可以暂时避免出现待机对话框,还是应该使用javascript在客户端执行此操作?这可以通过客户端脚本完成。无需一直提交数据
XSP.getElementById('id')。hidden=true代码>这可以通过客户端脚本完成。无需一直提交数据
XSP.getElementById('id')。hidden=true代码>如果您确实需要使用客户端-服务器往返(例如,如果您希望确保没有人会攻击您的客户端JS)计算每个按键事件上输入文本控件中的值的长度,并且假设您使用前面提到的XSnippet,并且不希望每次按键时都出现待机对话框,以下是您通常需要执行的操作:
- 执行
XSP.partialRefreshPost
时,可以将选项
对象作为最后一个函数参数传递。只需向该对象添加一个属性(如果您已经将某些内容放入其中)或使用单个属性创建新对象,它必须类似于
XSP.partialRefreshPost('#{id:yourId}', {dontShowDialog: true})
- 这个
options
对象一直传递到第39行,在那里发布partialrefresh start
事件并将该对象作为最后一个元素公开
- 第137行订阅此事件。在它声明的函数中再添加一个参数,如
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
现在您可以在函数体中读取选项了
- 有点像是根据您的
选项
参数,用条件语句包装下两行创建对话框。整个事情可以是这样的:
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
if (options) {
if (options.dontShowDialog) return;
}
StandbyDialog_Do = true;
StandbyDialog_Started();
});
以上所有内容都是针对使用客户端事件处理程序的情况编写的(将submit
属性设置为false
的方法。如果使用服务器端处理程序,事情会变得有点复杂,因为您无法将任何其他自定义属性传递给最终调用的\u partialRefresh
方法。但是,我可以想出一种方法来处理此问题:
- 在调用
\u partialRefresh
方法之前,CSJS引擎会做一些准备工作,其中之一是为页面上的一些隐藏输入字段设置特定值。这里我们感兴趣的是$$xspsubmitid
字段,该字段给定了声明的事件处理程序客户端id的值。然后您可以读取$$xxp的值如果它包含事件处理程序的ID,则不要显示待机对话框。这种方式灵活性要低得多,但应该可以工作
p.S.还没有尝试过上面写的所有内容,但如果你尝试失败,我很乐意调查并修复。如果你真的需要使用客户端-服务器往返计算每个关键事件的输入文本控件中的值的长度(例如,如果你想确保没有人会攻击你的客户端JS),并且假设您使用前面提到的XSnippet,并且不希望每次按键时都出现待机对话框,那么您通常需要执行以下操作:
- 当您执行
XSP.partialRefreshPost
时,可以将选项
对象作为最后一个函数参数传递。只需向该对象添加一个属性(如果您已经将某个属性放入其中)或使用单个属性创建新对象,该属性必须类似于
XSP.partialRefreshPost('#{id:yourId}', {dontShowDialog: true})
- 这个
options
对象一直传递到第39行,在那里发布partialrefresh start
事件并将该对象作为最后一个元素公开
- 第137行订阅了此事件。在它声明的函数中再添加一个参数,如
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options)
现在您可以在函数体中读取选项了
- 接下来的两行是基于
选项参数创建对话框的条件语句。整个过程如下所示:
dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) {
if (options) {
if (options.dontShowDialog) return;
}
StandbyDialog_Do = true;
StandbyDialog_Started();
});
以上所有内容都是针对使用客户端事件处理程序的情况编写的(将submit
属性设置为false
的方法。如果使用服务器端处理程序,事情会变得有点复杂,因为您无法将任何其他自定义属性传递给最终调用的\u partialRefresh
方法。但是,我可以想出一种方法来处理此问题:
- 在调用
\u partialRefresh
方法之前,CSJS引擎会做一些准备工作,其中之一是为页面上的一些隐藏输入字段设置特定值。这里我们感兴趣的是$$xspsubmitid
字段,该字段给定了声明的事件处理程序客户端id的值。然后您可以读取$$xxp的值如果它包含事件处理程序的ID,则不要显示待机对话框。这种方式灵活性要低得多,但应该可以工作
p.S.我还没有尝试上面写的所有内容,但如果您尝试失败,我很乐意进行调查和修复。添加一个客户端脚本,该脚本不允许用户输入超过x个字符。无需向用户发送消息或重新加载。只需在达到最大字符数时防止键入。添加一个客户端脚本,该脚本不允许用户输入er超过x个字符。无需向用户发送消息或重新加载。只需在达到最大字符数时防止键入即可。