2008-11-09 143 views
2

我有由多个可选的子部分的一种形式 - 每一个被封闭在一个如何根据其中的空输入字段隐藏div?

<div class="details"></div> 

当编辑的形式,我想隐藏某些不为尚未完成的子部分,显然我想不慌不忙地做。为了简化这些事情,我只是检查一下名称以'surname'结尾的字段是否为空,然后适当地显示/隐藏。到目前为止,我有这个。

//hide the all of the element class details 
$(".details").each(function (i) { 
    if ($('input[name$=surname]:empty',this).length == 1) { 
    $(this).hide(); 
    } else { 
    $(this).show(); 
    } 
}); 

当然,空选择器可能是错的,或者确实不合适。 (当然,我真正想做的是显示任何领域的任何部分完成,但我认为我会开始只是检查最重要的一部分。)

如果任何人都可以指向我,我将是伟大的正确的方向...

回答

5

没有选择者的爱?不完全确定这是你真正需要的东西,但是它隐藏了所有内部空输入的细节元素。也许这是一个线索。

<div class="details"> 
    <input type="text" name="surname" /> 
</div> 

<script type="text/javascript"> 
    $(".details input[@value='']").parents(".details").hide(); 
</script> 
+0

是把我在正确的道路上 - 见下文 – Dycey 2008-11-09 19:13:46

1

这可能只是一个错字,但你也用不着/不应该在您的标记“.details”,只是‘细节’的CSS类名。点前缀是CSS/jQuery选择器语法的一部分。

根据documentation,“:empty”查找空元素(如不包含子元素),而不是没有值的表单元素(空文本框)。检查等于空字符串的值属性将适用于单行文本输入,但您需要更复杂的查询以包括文本区域,单选按钮等。

+0

是的,它是个笔误。道歉 – Dycey 2008-11-09 19:06:49

1

这可能会执行所需的操作:

$("div.details input").each(function() { 
    if (this.value == "") 
    $(this).parents("div.details").eq(1).hide(); 
    else 
    $(this).parents("div.details").eq(1).show(); 
}); 

只希望影响场与name属性“姓”,做明显的:

$("div.details input[name$=surname]").each(function() { /* etc... */ 
3

谢谢你们 - 在[值=“”]是件我失踪。万一别人的奇迹,该诀窍(感谢克里斯蒂安)准系统:jQuery是

//hide the all of the element class details 
    $(".details").each(function (i) { 
     if ($('input[name$=surname][value=""]',this).length == 1) { 
     $(this).hide(); 
     console.log('hiding'); 
     } else { 
     $(this).show(); 
     console.log('showing'); 
     } 
    });