2012-07-31 52 views
2

我正在寻找解决方案来验证textfield对由json文件提供的数组的输入。 例如:在注册表单中检查,如果所需的用户名已存在。针对json/array的jQuery textfield验证

谁能帮助与工作的例子,插件,脚本或教程?

的 'usernames.json' 看起来像这样...

{"usernames":["carl","jack","jill"]} 

...并读出与...

$.getJSON("usernames.json", function(names) { 
var invalidName = names; 

我会去上...

jQuery.validator.addMethod 

...但是从现在开始,我很坚持。

如果有人可以帮忙做工作的例子,我会很高兴!

////////////////////////////////////////////// //////

编辑:感谢Utkanos和Pavel Staseljun,我能想出以下解决方案,这是只有大致测试! 请在下面找到Utkanos的例子,因为这个例子包含“keyup”操作,而不是“submit”,并且不包含“required”--check。 “#errorresponse”是div,可能会显示错误消息。

$.ajax({ 
    url: "http://yoururlto.json?callback=?", 
    dataType:"jsonp", 
    jsonpCallback: '?', 
    async: false, 
    success: function(json) { 
     $('#user').keyup(function(evt) { 
     var jsonarray = json.usernames; 
     var userinput = $('#user').val().toLowerCase() 
     var check = $.inArray(userinput, jsonarray); 
     if (check !== -1) { 
      $("#errorresponse").text('Thanks to Utkanos and Pavel Staseljun!'); 
      } 
     }) 
     } 
}); 

回答

1

HTML

<form id='signup'> 
    <label>Choose a username</label> 
    <input type='text' id='user' /> 
    <input type='submit' value='submit' /> 
</form> 

JS/jQuery的

$.getJSON("usernames.json", function(json) { 
    $('#signup').on('submit', function(evt) { 
     var user = $('#user').val(), error; 
     if (!user) 
      error = 'no username entered'; 
     else if (json.usernames.indexOf(user) != -1) 
      error = 'username already taken'; 
     if (error) { evt.preventDefault(); alert(error); } 
    }); 
}); 
+1

我想'如果($ .inArray($( '#用户名')VAL(),json.usernames)。)错误= '用户名已经采取了';',而不是'如果(json.usernames.indexOf($ ('#username').val())!= -1)error ='用户名已被占用';'更好..? – 2012-07-31 09:35:13

+1

嗯,是的,它更加跨浏览器。我只是喜欢ECMA5 :) – Utkanos 2012-07-31 09:36:47

+0

非常感谢你们俩!这非常有帮助! :-) – Elvis 2012-08-01 08:56:11

0

为什么你想从服务器发送所有用户名到客户端?这听起来像一个非常糟糕的主意。请做一些类似于服务器端的功能,检查发布的用户名,并返回真或假的有效或无效?如果用户名存在

好多IMO

+0

因为我更喜欢某种“即时”验证,所以json更快。 这应该也适用于移动设备;在这种情况下,服务器端功能(如php)是不可能的。 – Elvis 2012-07-31 09:48:18

+0

通过使用ajax,您可以使用“即时”验证,尤其是在移动设备上,您将获得相当快的速度,以保持10000个用户名数组的速度比简单的ajax请求慢得多。此外,如果每个客户端都可以读取所有用户名,那么这似乎是一个安全问题。 – kannix 2012-07-31 11:21:56

+0

也许我们有一个误解?我确实使用ajax/js进行验证。 :-) 事实上,我已经选择了“用户名” - 场景作为示例,以使问题更常见。有两个验证步骤:一个是发送表单之前(客户端),另一个是通过php(服务器端)处理提交。 因此,在这种情况下,它只是快速的客户端解决方案。 – Elvis 2012-08-01 08:10:28

0

你能不能创建一个AJAX脚本检查,因为你可以直接将其与使用远程选项的jQuery验证集成。

+0

你说得对,这可能是一个解决方案,但在这种情况下,我正在寻找客户端“预验证”。 – Elvis 2012-08-01 08:14:26