【发布时间】:2010-05-21 00:15:00
【问题描述】:
我现在正在尝试编写一个简单的输入字段验证插件(实际上更像是一个学习练习)并认为这不会太难,因为我应该做的就是:
- 获取输入字段
- 将它们存储在数组中 价值
- 在提交表单时检查是否为数组 包含任何空字符串
但我似乎无法在我的数组中编写检查空字符串 (读取:输入,其中没有文本) 的内容。
这是我目前的代码:
var form = $(this), // passed in form element
inputs = form.find('input'), // all of this forms input fields
isValid = false; // initially set the form to not be valid
function validate() {
var fields = inputs.serializeArray(); // make an array out of input fields
// start -- this does not work
for (var n in fields) {
if (fields[n].value == "") {
isValid = false;
console.log('failed');
} else {
isValid = true;
console.log('passed');
};
}
// end -- this does not work
}; // close validate()
// TRIGGERS
inputs.live('keyup blur', function(event) {
validate();
});
任何有关如何检查其中一个字段是否为空白以及如果是则返回isValid = false 的帮助将不胜感激。
我也玩过$.inArray("", fields),但即使console.log 显示字段没有值,它也永远不会返回0 或1。
感谢阅读。
【问题讨论】:
-
作为一个侧面观察,当任何个输入字段发生变化时,是否有必要查看所有个输入字段?难道您不想重新验证已更改的输入吗?此外,如果您想包含
<select>和<textarea>,您可能希望:input而不是input作为您的选择器。 -
如果您使用 jQuery,请搜索 API 并查看可以使用哪些快捷方式。您可以使用
$.each,而不是使用for..in循环。您可以使用$(variable).val()而不是variable.value。基本上,使用 jQuery 或摆脱它,否则如果您在直接 JS 和 jQuery JS 之间切换,代码的可读性会急剧下降。 (我保证,你最终会感谢自己的。) -
我昨天在ajgraham.com/2010/05/simple-but-powerful-jquery-form-validation/…写了类似的东西,如果你想比较方法,有很多交叉
-
for..in是个坏主意。它用于枚举对象的属性。应该使用常规的for循环来迭代数组值,或者 jquery 提供的$.each。 -
感谢大家的cmets!他们非常有帮助。我现在决定使用 jQuery 提供的
$.each,它工作得很好。再次感谢。
标签: javascript jquery validation arrays