首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .closest()返回多个结果

jQuery .closest()返回多个结果
EN

Stack Overflow用户
提问于 2015-05-15 10:24:28
回答 2查看 260关注 0票数 0

我试图在我的html表单上实现一个验证,用引导类has-error突出显示表单输入,以防用户在我的rails应用程序中输入错误信息。我使用ajax与一个包含错误消息的自定义data对象。到目前为止,我已经想出了这个:

application.js

代码语言:javascript
复制
   jQuery.each(data.messages, function(i, val){
    $("label").val(i).closest("form-group").addClass("has-error");
  });

_account.html.erb

代码语言:javascript
复制
<div class="form-group">
 <%= account_form.label(:label, "Label") %>
 <%= account_form.text_field(:label, class: "form-control") %>
</div>
<div class="form-group">
 <%= account_form.label(:iban, "Iban") %>
 <%= account_form.text_field(:iban, class: "form-control", maxlength: 29, data: {toggle: "tooltip"}) %>
</div>
<div class="form-group">
 <%= account_form.label(:swift, "Swift") %>
 <%= account_form.number_field(:swift, class: "form-control", maxlength: 8, data: {toggle: "tooltip"}) %>
</div>

例如,i = "swift"val = "is blank",所以如果用户提供了一个标签,但忘记了另外两个,那么i中只有"swift""iban"

我的问题是,对于.each所做的每一个循环,.closest都返回所有的3个div,所以我无法根据带有.closest的标签来选择一个div。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 10:33:07

试试这个:-

代码语言:javascript
复制
 jQuery.each(data.messages, function(i, val){
  $("label:contains('"+i+"')").closest("form-group").addClass("has-error");
});

或者这将匹配所有文本:-

代码语言:javascript
复制
jQuery.each(data.messages, function(i, val){
  var lbl=$('label').filter(function () {
       return $(this).text().toLowerCase()==i.toLowerCase();
   }).first();
  lbl.closest(".form-group").addClass("has-error");
});
票数 1
EN

Stack Overflow用户

发布于 2015-05-15 10:33:03

由于您希望选择文本位于data.messages对象中的标签,所以我认为您可以尝试

代码语言:javascript
复制
$('.form-group label').filter(function () {
    return !!data.messages[$(this).text().trim()];
}).closest("form-group").addClass("has-error");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30257120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档