2012-03-23 45 views
1

我对包含表单的div有以下标记。该表格有一个基本的搜索div和高级div。根据输入字段中包含的任何值显示隐藏的div

<div class="form"> 
    <form> 
     <input type="text" name="first_name"> 
     <input type="text" name="last_name"> 

     <div class="Basic" class="slide"> 
     <input type="text" name="location"> 
     </div> 

     <a class="toggle-link" onclick="ShowDiv('Adv');">+ show advanced fields</a> 

     <div id="Adv" class="slide hidden"> 
     <input type="text" name="first_name2"> 
     <input type="text" name="last_name2"> 
     <input type="text" name="street"> 
     <input type="text" name="town"> 
     <input type="text" name="country"> 
     </div> 
    </form> 

    <a onclick="ShowDiv('Basic');">- hide advanced fields</a> 
    </div> 

隐藏/显示是基于运作上下面的脚本:

function HideDiv() { 
      $('.slide').hide(); 
     } 
     function ShowDiv(ctrl) { 
     HideDiv(); 
    $('#' + ctrl).show(); 
     } 
     ShowDiv('Basic'); 

我的问题(这是基于现有问题的后续票,我从来没有设法去上班)是我想要一个用户,当他返回到这个搜索表单时,如果他首先使用了高级搜索表单,那么他将被展示高级div。因此,如果任何输入字段包含任何数据值,则当用户返回页面时div应该打开。

到目前为止我有这个代码,但它不起作用。

$(document).ready(function() { 

    $(function(){ 
     $("div#Adv input").each(function(){ 
      if($(this).val()!='') 
       $(this).parent().parent().show(); 
       return;      
    }); 
}); 

回答

1
$(function(){ 
    if($("#Adv input[value!='']").length){ 
     $('#Adv').show(); 
     $('a.toggle-link').hide(); 
    } 
}); 
+0

这似乎是工作。现在唯一的问题是,当显示div时,+ show advanced fields也是如此。需要在你的代码中添加什么,所以当div显示时,类=“toggle-link”隐藏起来 – gek 2012-03-23 10:57:07

+0

@ aa1。我将它添加到答案中。 – gdoron 2012-03-23 12:26:15

0

你应该做

$("div#Adv input").each(function(){ 
     if(this.value !== ''){ 
      //get the first ancestor with class=slide and show it 
      $(this).closest('.slide').show(); 
      return; 
     } 
    }); 
+0

嗯,似乎没有任何工作。 div#Adv仍然隐藏。 – gek 2012-03-23 10:49:07

+1

@ aa1这是trange,因为它在这里工作http://jsfiddle.net/RYNRQ/你把这个代码放在$(document).ready()里面吗? – 2012-03-23 10:55:15

+0

是的,我做到了。现在我已经将脚本的位置移到我的页面上的其他一些现有脚本之前,并且它也可以工作。谢谢 – gek 2012-03-23 11:02:33

0

我相信你缺少一些支架有

$(document).ready(function(){ 
    $(function(){ 
     $("div#Adv input").each(function(){ 
      if($(this).val()!='') 
      { 
       $(this).parent().parent().show(); 
       return; 
      } 
    }); 
}); 
+0

我已经将您的代码完全复制到了我的页面上,但无论如何div div仍然隐藏。我放置这些代码的位置是否重要?目前它包含在我的页面底部,而隐藏/显示脚本是从外部文件引用的。 – gek 2012-03-23 10:44:27

+1

如果你想显示'#Adv',使用'$(this).parent()。show()'而不是'$(this).parent()。parent()。show()' – slash197 2012-03-23 10:52:34

相关问题