【问题标题】:Validate only parts of a form仅验证表单的一部分
【发布时间】:2014-12-30 16:56:08
【问题描述】:

我有一个相当大的表格,我已经将它分成几个单独的部分,带有“下一步”和“返回”按钮,供用户浏览每一步。

这是我现在设置它的方式:

  • 每个部分都在自己的 xp:panel 中
  • 每个 xp:panel 都用“display:none”隐藏。当用户使用 JQuery 的淡入淡出动画单击“下一步”或“返回”时,就会发生过渡

我想要做的是,如果用户单击“下一步”,我只想验证当前可见部分中的字段。如果验证失败,请不要过渡到下一步。如果验证通过,则转到下一步。

现在,当我单击“下一步”按钮时,每个字段都在验证,并且不会发生转换。

有没有办法,我只能验证某个部分中的字段,或者我必须使用 Don Mottolo 的代码 sn-p 之类的东西:http://openntf.org/XSnippets.nsf/snippet.xsp?id=ssjs-form-validation-that-triggers-errormessage-controls

感谢您的帮助!

P.S.:我知道我可以使用按钮的 onClick 事件的 CSJS 部分来运行一些验证,但我想使用“显示错误”控件。

【问题讨论】:

  • 哪种语言,c#,java?
  • 您好 Piyush,感谢您的评论。这是 XPages 开发,我们主要使用 JavaScript

标签: forms validation xpages


【解决方案1】:

您可以查看计算每个要验证的控件的required 属性,然后检查哪个按钮正在提交表单。 Tommy Vaaland 有一个函数可以做到这一点:

// Used to check which if a component triggered an update
function submittedBy( componentId ){
 try {
  var eventHandlerClientId = param.get( '$$xspsubmitid' );
  var eventHandlerId = @RightBack( eventHandlerClientId, ':' );
  var eventHandler = getComponent( eventHandlerId );  
  if( !eventHandler ){ return false; }

  var parentComponent = eventHandler.getParent();
  if( !parentComponent ){ return false; }

  return ( parentComponent.getId() === componentId );  
 } catch( e ){ /*Debug.logException( e );*/ }
}

链接:http://dontpanic82.blogspot.co.uk/2010/03/xpages-making-validation-behave.html

【讨论】:

  • 您好 Rob,感谢您的回复。似乎是要走的路。我会试试,让大家知道
  • 你好 Rob,这确实很好用。您实际上可以实现对字段的属性“disableValidators”(可以在“数据”部分下的“所有属性”选项卡中找到)的检查。这样,如果您的字段有多个验证器和/或更复杂的验证器,则不必将其添加到每个验证器中。
  • 感谢@Daniel F。正如我经常在这里回答问题时发现的那样,我通过我提供的每个答案来了解更多关于技术的信息:-)
  • 确实如此。我只是希望 XPages 的文档内容更丰富、更全面。当我查看各个控件的所有属性时,有时我想知道它们可以用来做什么以及如何帮助我改善用户使用我开发的应用程序的体验。
【解决方案2】:

您可以查看使用客户端表单验证框架,例如 Parsley:http://parsleyjs.org

这当然可以与至少最终提交的服务器端验证相结合。

【讨论】:

  • 您好 Per,感谢您的回复。你有任何将它与 Bootstrap 结合使用的经验吗?
  • 是的,我在一个使用 Bootstrap 的项目中使用 Parsley。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2016-02-18
  • 2019-09-06
  • 2012-11-02
  • 2011-02-17
  • 1970-01-01
相关资源
最近更新 更多