Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails中的客户端验证以及jQuery滑块中的表单_Jquery_Ruby On Rails_Validation_Client Side - Fatal编程技术网

Rails中的客户端验证以及jQuery滑块中的表单

Rails中的客户端验证以及jQuery滑块中的表单,jquery,ruby-on-rails,validation,client-side,Jquery,Ruby On Rails,Validation,Client Side,我有一个网站,它有一个基于jQuery的滑块 在这些幻灯片中,我有一个新用户注册的Rails表单。我使用的是客户端验证 问题在于,由于表单位于第二张.showcase幻灯片上,因此当页面加载时,它在DOM中不存在,并且客户端验证不起作用 我需要一种方法来使用客户端验证的GitHub页面上的钩子,在加载元素时激活客户端验证 那么我如何使用hook$('form#user_new[data validate]')。validate(),其id为user\u new,不会立即加载,并且在更改showc

我有一个网站,它有一个基于jQuery的滑块

在这些幻灯片中,我有一个新用户注册的Rails表单。我使用的是客户端验证

问题在于,由于表单位于第二张.showcase幻灯片上,因此当页面加载时,它在DOM中不存在,并且客户端验证不起作用

我需要一种方法来使用客户端验证的GitHub页面上的钩子,在加载元素时激活客户端验证

那么我如何使用hook
$('form#user_new[data validate]')。validate(),其id为
user\u new
,不会立即加载,并且在更改showcase幻灯片时从DOM中消失

我尝试了几种
.live
.bind
变体,但显然我的jQuery非常弱,我没有运气

请帮忙

使现代化 我试过这个:

$("body").delegate("#user_username", 'focus', function(){
   $('form#user_new[data-validate]').validate()}); 
但是现在每次我点击#user_username字段时,另一个验证被添加到堆栈中,我会看到单个字段显示多个错误(克隆)

另一个更新和丑陋的解决方案 好吧,这就是我想到的,但它确实很难看。欢迎任何更好的解决方案

$("body").delegate("#user_username", 'focus', function(){
  if ($('form#user_new[data-validate]').data('events') === undefined ) { 
    $('form#user_new[data-validate]').validate()  
  }});

这可能不那么粗

不过,您需要在您关注的字段中添加一个类(即“validateme”)

$("body").delegate("#user_username.validateme", 'focus', function(){
   $(this).closest('form').removeClass('validateme').validate();
}); 

这样,只有当被关注的元素具有validateme类时,才会添加验证。一旦它被聚焦,类就被移除,验证被应用到表单上。

这可能会少一点粗块

不过,您需要在您关注的字段中添加一个类(即“validateme”)

$("body").delegate("#user_username.validateme", 'focus', function(){
   $(this).closest('form').removeClass('validateme').validate();
}); 

这样,只有当被关注的元素具有validateme类时,才会添加验证。一旦它被关注,类就被删除,验证被应用到表单上。

我使用的是rails 3.2.8、simpleForm 2.0.2、client_-side_-validations 3.2.0.beta.4和client_-side_-validations-simple_-form 2.0.0.beta.1以及上面的解决方案,但是解决方案是不完整的,因为当验证失败时(更改tab和back)如果多次触发同一字段的同一格式错误,则字符串错误将重复、三倍,以此类推

因此,对于这个特定字段,您必须在js.coffee文件中添加一个“span橡皮擦”,因为客户端验证每次都会添加一个span,而您只希望看到最后一个span

完整的解决方案是(将代码放入*.js.coffee文件中):


这是一个示例;如果您的案例不同,请检查生成的HTML并使用选择器。

我使用的是rails 3.2.8、simpleForm 2.0.2、client_-side_-validations 3.2.0.beta.4和client_-side_-validations-simple_-form 2.0.beta.1以及上面的解决方案,但解决方案不完整,因为当验证失败时(更改tab和back)如果多次触发同一字段的同一格式错误,则字符串错误将重复、三倍,以此类推

因此,对于这个特定字段,您必须在js.coffee文件中添加一个“span橡皮擦”,因为客户端验证每次都会添加一个span,而您只希望看到最后一个span

完整的解决方案是(将代码放入*.js.coffee文件中):


这是一个例子;如果您的情况不同,请检查生成的HTML并使用选择器。

Fer这里再次提到,我忘了告诉您我的错误是使用Pjax的,但是在这种情况下,当您有多个表单使用客户端验证并切换它们(在选项卡、jquery容器等中)时,就会出现错误是一样的。对于links:remote=>true是一样的,但更容易使用“.live”和listo!!!link在这里会工作得更好,我忘了告诉我我的错误是使用Pjax的,但是在这种情况下,当您有几个表单使用客户端验证并切换它们时,就会出现错误(在选项卡、jquery容器等中)相同。对于链接:remote=>true是相同的,但更易于使用“.live”和listo!!!链接将很好地工作