我想检查表单的值是否为空?在jquery.ketchup.0.3.2之类的许多验证器失败之后,我试图编写自己的验证器(或者我可能失败了) 但我不能让这个功能起作用。
function validate() {
alert("hmmm");
var inputs = document.forms["register"].getElementsByTagName("input");
for (var item in inputs) {
if(item.value.trim() == "")
alert("nullField");
}
}
你能告诉我上述功能有什么问题吗?
答案 0 :(得分:3)
如果您要使用jQuery,那么使用jQuery 。
validate(){
var $inputs = $('input', 'form[name="register"]');
$inputs.each(function(){
var val = $.trim(this.value);
if(!val.length){
// Not valid
}
});
}
答案 1 :(得分:3)
我想知道你使用的是for
循环。要循环集合(数组),请使用普通for
循环,而不是for in
。也许这解决了它:
function validate() {
alert("hmmm");
var inputs = document.forms["register"].getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
if(inputs[i].value.trim() == "")
alert("nullField");
}
}
请注意,.trim()
并非在所有浏览器中都可用:http://kangax.github.io/es5-compat-table/#String.prototype.trim
可能更喜欢的jQuery替代方法是使用类似的东西:
$('form[name="register"]').find('input[type="text"]').each(function () {
var $this = $(this);
if (!$.trim($this.val())) {
// Left empty
}
});
参考文献:
.find()
:http://api.jquery.com/find/ .each()
:http://api.jquery.com/each/ .trim()
:http://api.jquery.com/jQuery.trim/ 答案 2 :(得分:0)
如果您只想使用javascript:
首先确保定义了修剪功能:
if(!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g,'');
};
}
现在实际功能:
function validate() {
var inputs = document.forms["register"].getElementsByTagName("input");
for (var i = 0, len = inputs.length; i < len ; i++) {
if(inputs[ i ].value.trim() == ""){
// Validation failed
}
}
// Validation successful
}
答案 3 :(得分:-2)
我强烈(我的意思是强烈)建议不要编写自己的验证。然而,您的代码有一些问题。
foo = { bar: '0', baz: '1'}
将遍历bar
和baz
(属性,而不是值)。如果你想获得你需要通过这样做来表明的价值
for(var i in foo){ console.log(foo[i]);}
,或在您的示例中:inputs[item].value
。getElementsByTagName
返回NodeList
(请参阅here)。 NodeList
在列表中的元素旁边有其他属性。如果你正在使用jQuery,那么你只需要$("#register input").val()
来获取相关值的数组,你就可以使用$.map
函数为每个值做一些事情。