2014-09-03 82 views
0

我是backbone.js和underscore.js的新手。我有一个注册和登录表单,处理验证错误。 我在提交未填写表单时捕获错误。 当我把所有的错误放在窗体上时,我都陷入了困境。我只获得数组中所有表单元素的最后一个错误。我研究并似乎无法找到解决方案。下面的代码片段。无法遍历_.each

此函数遍历数组,但仅给出数组中最后一个索引,而不是所有的 错误消息。当我执行console.log(error.message) 时,我的控制台日志显示了所有的错误消息,但是并没有在窗体上仅显示最后一个状态。我究竟做错了什么。

您的帮助表示感谢 感谢您提前。 我会发布完整的代码,我得到它的工作,所以它可以帮助别人。我; M用骨干1.1.2

PDH

validate: function(attrs, options) {   
var errors = []; 
ect... 

} 

showErrors: function(errors) { 

_.each(errors, function (error) { 
var controlGroup = this.$('.' + error.name); 
controlGroup.addClass('errors'); //not sure if I need this 
$("div.form-group").find('.help-inline').text(error.message); 

}, this); 
}, 

回答

1

$("div.form-group").find('.help-inline').text(error.message); 

使用

$("div.form-group").find('.help-inline').append(error.message+"<br />"); 

在每一个循环,而不是要覆盖的是已经存在的文本。因此,只有最后一个索引会出现

+0

谢谢你的快速回复,追加的作品,但现在我得到在每行每个错误时,它应该只对数组中的每个元素一个错误。 – user2280852 2014-09-03 19:00:32

+0

请使用
这样的标签。$(“div.form-group”)。find('。help-inline')。append(error.message +“
”); – mallik 2014-09-04 06:15:10

0

循环通过错误div。从数组中获取适当的错误。将错误设置为错误div的文本。

_.each($("div.form-group").find('.help-inline'), function(errorDiv, index){ 

$(errorDiv).text(errors[index]); 
}); 

FIDDLE

+0

嗨,这不适用于我错误是一个对象,其中包含有关错误的所有信息 – user2280852 2014-09-04 16:56:48

+0

var errors = []; 警报(“错误被捕获”); //错误处理 if(!attrs.email){error.push({name:'email',message:'请输入一个有效的电子邮件地址。如果(errors.length> 0){ return errors.length> 0?错误:错误; } – user2280852 2014-09-04 17:07:11

0

我想通了什么我的问题是,我可以踢自己没有看到明显。我所拥有的代码是正确的,问题在于我写完这个类,因为所有的类都有相同的名字。我必须对我的 HTML代码进行一些更改。在我将所有类名称都设置为相同之前,例如form-group。例如,我将该名称更改为表单组电子邮件 ,并在验证中清除了几个问题。希望这样可以节省别人的时间 PDH

<div class="form-group email"> 
<label for="email2">email &nbsp;<span class="help-inline"> 
</span><input type="email" name="email"></label><br />    
</div> 

showErrors: function(errors) { 

_.each(errors, function (error, index) { 

var controlGroup = this.$('.' + error.name); 
controlGroup.addClass('errors'); 

controlGroup.find('.help-inline').text(error.message); 
console.log(error.message); 


}, this); 
},