我正在学习jquery并开始我的第一次尝试,根据我目前所知的(不是很多)构建一个表单验证脚本。
这实际上只是验证脚本的单选按钮部分,但在我走得太远之前,我认为我走上了正确的轨道 - 编码方式。我知道有一些基本问题需要解决。
剧本(jsFiddle):http://jsfiddle.net/pkdsleeper/xNt5n/
问题:
a. How best to remove the global variables using
b. jsLint recommends "use strict", so I added it, but im not sure what it does.
c. any good refs?
d. Generally, feel free to rip this code apart (cuz I AM trying to learn) but
please explain my errors in noob-speak :)
提前谢谢你 轨枕
答案 0 :(得分:3)
一个。好吧,你完全摆脱了全局性。但是,正如您的代码现在看起来一样,您可以将整个内容包装在(function(){ ... all your current code in here ... }())
中,并将 nothing 留在全局范围内。
湾对于“use strict”,请参阅this question
℃。 typeof questions['c'] === "undefined"
...
d。目前,您的js与标记(html)过于依赖,反之亦然。如果您在表单中添加或删除某些内容,则必须编辑您的js。如果你想对另一个表单使用验证,你将不得不重新开始整个过程。
验证者是“不引人注目的javascript”/渐进增强的主要候选者(这里有一些材料:A List Apart& Wikipedia)。基本上,你的标记(html),你的样式(css)和你的“行为”(javascript)都应该是分开的,所以它们可以独立更改。这是你可以尝试的东西:
form.validate
submit
事件处理程序<input type="text" class="required zip-code">
意味着a)它是一个邮政编码,b)它是必填字段。这显然是一个非常粗略的轮廓,但我不会为你编写代码:) 关键是,如果您需要更多的表单或不同的表单或类似的东西,您有一个通用的验证脚本,而您需要做的就是用适当的类名“标记”输入。
所有这一切:有吨的jQuery插件可以进行表单验证。自己写一个绝对是一个很好的练习,但是看看已经存在的东西以及它是如何工作的也是一个好主意。不要立即查看代码,而是阅读如何使用这些验证器(例如,他们是否使用类名或其他东西?)并尝试弄清楚它们是如何工作的。
答案 1 :(得分:3)
一个。如何最好地使用
删除全局变量
将其包装在匿名函数中,并将其作为提交侦听器分配给表单。
湾jsLint建议“使用严格”,所以我添加了它,但我不知道它做了什么。任何好的参考?
不要打扰。对于那些想要嘻哈的人来说,这只是个热门话题。您不能在常规Web上使用严格模式功能,因为太多浏览器不支持它们。您可以将其与其他兼容的ES 3代码一起使用,但它只适用于在测试期间应该找到的错误的调试工具(例如,在没有新的情况下调用构造函数)。
没有c?
d。一般情况下,随意撕掉这段代码(因为我正在努力学习),但请在noob-speak中解释我的错误:)
> $rdoGroup = [], // an empty array which will be used to hold
您似乎使用$来表示引用jQuery对象的变量,但 $ rdoGroup 只是一个数组。这可能会让人感到困惑。
> $rdoGroup.push($(this).attr("name"));
$功能非常昂贵,如果你不需要,请不要使用它。标准HTML属性在所有浏览器中都可用作DOM属性,因此:
$rdoGroup.push(this.name);
效率提高100倍,具体取决于浏览器。
> for (i = 0; i < $rdoGroup.length; i++) {
> if ($rdoGroup[c].toString() !== $(this).attr("name").toString()) {
分配给 $ rdoGroup 的值是字符串,调用它们的 toString 方法是多余的。
如上所述,使用this.name
。 name属性是一个字符串,因此不需要 toString 。
我认为没有jQuery,练习会更容易,这似乎远远超过了帮助。如果您正在尝试学习javascript,我建议您在不使用任何库的情况下学习javascript。
一旦你对使用javascript有了相当的信心,那么你就可以更好地使用库来实现图书馆所擅长的东西,而不是将它用于它不擅长的东西。