- 浏览: 84915 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
骑猴上树:
报错啊SyntaxError (C:/home/blog/ap ...
Rails的validate验证的本地化 -
benlhp:
通许一天是什么意思啊??
有.没,有.人要买railscasts pro,想找一个人一起合买 -
Hooopo:
我想知道pro的内容有什么特别吗
有.没,有.人要买railscasts pro,想找一个人一起合买 -
cxh116:
en 看不懂
有.没,有.人要买railscasts pro,想找一个人一起合买 -
夜鸣猪:
多么,我怎么只看到2个pro两个revised,就四个怎么值得 ...
有.没,有.人要买railscasts pro,想找一个人一起合买
先上效果图吧!
验证标准方法分成了3个部分:
1 . 输入框失去焦点的时候验证并提醒,建立良好的用户体验。
2 . 表单提交前验证是否全部合格,确保数据符合要求。
3 . 模型层的验证。
这里说的用户注册AJAX验证主要是只离开用户名输入框焦点的时候即时提醒是否被占用。
注册页面时用jquery插件thickbox展现的,这个不影响什么。
在验证用户是否被占用的时候,
使用jQuery的GET方式提交到users控制器的signup_login_check这个ACTION
之所以写成/users/signup_login_check/temp ,是因为我发现如果写/users/signup_login_check的话,
signup_login_check会被当成ID提交,action是show,改一下路由规则后应该是可以写成/users/signup_login_check的。
不然如果懒得改的话,写成/users/signup_login_check/temp 似乎也没什么害处,temp被按照默认路由解析成ID,也不起什么坏的作用。
这个是我的jQuery代码,以验证用户名为例。没用使用jquery的validate插件,我觉得直接写也没什么麻烦的。
先检查长度,符合要求再提交AJAX检查是否被占用。
//开始验证输入的用户名 $("input").focus(function(){ $(this).setBlue(); }); $('#user_login').blur(function(){ var login_length=$(this).val().length; if(login_length<=1 || login_length>=14){ $(this).setRed("用户名为2-14个数字、字母、汉字"); } else{ $.get("/users/signup_login_check/temp",{ user_login:$(this).val() },null,"script"); }; });
这个是处理AJAX的ACTION
def signup_login_check user=User.find_by_login(params[:user_login]) if user render :js=> "$('#user_login').setRed('抱歉,该用户名已被占用');" else render :js=> " $('#user_login').setGreen();" end end
上面有很多setRed setGreen,这样命名其实不是很好,不过比较直观,其实是控制样式的jquery,代码如下
$tip.addClass("errorFlag");
这个主要是用于按了提交按钮后来数有几个错误用的, errorFlag这个CSS类是空的,没有样式内容。
jQuery.fn.setRed=function(message){ $(this).css("border-color",red); $tip=$(this).next(); $tip.css("color",red); $tip.text(message); $tip.addClass("errorFlag"); }; jQuery.fn.setGreen=function(){ $tip=$(this).next(); $(this).css("border-color",green); $tip.css("color",green); $tip.html("<img src='/images/sign/alt.gif'>"); $tip.removeClass("errorFlag"); };
视图中的表单基本上是这样的:
<% form_for :user, :url => users_path ,:html=>{:id=>"usersignup"} do |f| -%> <table> <tr> <td >用户名:</td> </tr> <tr> <td ><%= f.text_field :login ,:class=>"sign_up_field"%> <em>用户名为2-14个数字、字母、汉字</em></td> </tr> <tr> <td >Email:</td> </tr> <tr> <td> <%= f.text_field :email,:class=>"sign_up_field" %> <em>Email将用于找回密码</em> </td> </tr> <tr>
提交前对所有文本框模拟的失去焦点,然后数有多少个errorFlag,这个是《锋利的jQuery》上介绍的做法,我直接搬过来了。
//提交前的验证 $("#send").click(function() { $("form :input").trigger('blur'); var numError=$("form .errorFlag").length; if(numError>0){ return false; } });
以上实现参考了 fsjoy1983 http://fsjoy.blog.51cto.com/318484/142351
他使用json返回数据,我用的js。而且他把验证ACTION放到INDEX里面了,这个做法不好。
还参考了 Ryan 的 http://railscasts.com/episodes/136-jquery
他是用来处理留言,所以需要重新渲染的东西比较多,就集中放到 js.erb ,我只有1行数据需要返回,就直接写到控制器里了。
欢迎留言赐教!
评论
用jquery,我大概会这样做(细节忽略):
额。。。似乎不错,学习了!
在b:
$("input").change(function(){ var $this = $(this); $.getJSON('/users/new.json', {field, value}, functin(errors){ if(data.errors[$this.attr('name')]){ $this.addClass('fieldError'); } }) });
在s:
# UsersController def new @user = User.new(params[:user]) respond_to do |format| format.html format.json { render :json => @user.valid? || @user.errors } end end
propotype太没有ruby的风格啦!jQuery才像ruby风格嘛!
<div class="quote_div">没人回,我来帮你顶顶人气。<img src="/images/smiles/icon_biggrin.gif" alt=""> 不过我的ror还学得一塌糊涂,提不了什么意见。不过从Web开发角度来看,好像你的后端没做二次校验,这个是比较危险的。</div>
<p> </p>
<p>做了模型层的validate,那是最基本的。不然如果用户禁用了JS,就。。。。。</p>
发表评论
-
蜗牛同学新做的小站,大家轻拍
2011-03-16 17:32 1989是一个常见的旅游网站,目前来说业务只在南京地区 网址是 悠 ... -
mongoid没有的set_defaults rake
2011-02-07 23:23 1009#https://github.com/iamnade ... -
转//mongoDB安装
2011-01-06 23:06 805http://shiftcommathree.com/arti ... -
转载 memcached命令
2010-11-15 12:52 1130http://blog.chinaunix.net/ ... -
linux文件权限
2010-11-02 20:47 1167sudo chmod -R 777 /home/www/ ... -
同一个控制器,公用子菜单的方法
2010-10-20 12:08 880在做管理后台的时候经常会遇到同一个控制器的 :index ,: ... -
_form 中常用的 form_for ,这样就不用写两次 url 啦!
2010-09-19 23:41 973额,这个是 /admin/xxx 下的情况,备份一下免得忘记了 ... -
task调用
2010-09-19 16:30 902task :yyy do Task[:xxx].i ... -
比较好的用户多角色控制,适用于用户角色不多的情况,最好5个以内
2010-09-19 16:18 899named_scope :email_is, lambda ... -
truncate_u
2010-09-17 15:31 1102def truncate_u(text, length = ... -
will_paginate 中文
2010-09-16 10:33 1532在 /config/initialize下放一个 will_p ... -
Nginx防盗链的几种方法
2010-09-12 10:45 1519转载: http://www.31sky.net/node/3 ... -
VPS安装记录
2010-09-12 10:43 1227操作系统 Linux ubuntu 2.6.32-21-se ... -
rails的301重定向
2010-09-09 10:54 938def redirect_301_to url ... -
zhuan//為Ruby on Rails程式加入拖曳排序功能~
2010-07-25 11:56 900来源: http://www.simplexteam.org/ ... -
转 Installing Nginx with Passenger on Linux (from source)
2010-07-24 02:05 879http://www.openmymind.net/2010/ ... -
复制一下,免得下次翻越围墙
2010-07-15 15:32 395分享: <!-- MURMUR --&g ... -
抄写一下
2010-07-15 15:29 721Deploying a Ruby on Rails appli ... -
周末在家两天利用Nokogiri 和 Mechanize 写了个团购导航小网站。。。轻拍砖。。。
2010-07-14 02:24 2277module Goods module MeiTuan ... -
[转载]rails Helper 解析
2010-04-16 01:26 3702http://blog.csdn.net/e_online/a ...
相关推荐
井字游戏API要求用户注册然后登录以获得身份验证令牌。 我们将严重依赖curl , httpbin.org ,API和jQuery.ajax。 在课程结束时,我将讨论EventSource , Server Sent Events和包装器resourceWatcher 。 使用API...
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
JQuery AJAX调用用于所有数据库请求,而Jbuilder视图用于将返回的Ruby实例转换为JavaScript对象。 AWS集成用于存储和检索故事封面图像和缩略图。特征用户认证大型同时维护前端和后端用户身份验证。 客户端验证和...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...