2013-09-24 38 views
2

我有以下的jQuery:从选择框jquery隐藏/显示div不工作,我不明白为什么?

<script> 
    $(document).ready(function() { 
     $(".search_type").hide(); 
     $("#select_search").change(function() { 
      $('#' + $(this).val()).toggle(); 
     }); 
    }); 
</script> 
<select id="select_search"> 
     <option value="1"> 
     <option value="2"> 
     <option value="3"> 
</select> 
<div id="1" class="search_type">Some Text</div> 
<div id="2" class="search_type">Some Text</div> 
<div id="3"class="search_type">Some Text</div> 
enter code here 

目前,我有它显示基于选择框的变化相应的div,但是,这不,如果选择框再次更改删除它。

是否有一个if(($ this):not.val()).....有什么隐藏的东西?对不起,我是JS/jQuery的新手,在这里真的很挣扎。

+0

请分享相关的HTML –

+0

见下文 –

回答

2

你需要隐藏以前显示的元素,一个简单的方法来起诉隐藏所有search_type再次元素的变化处理,然后显示当前元素

jQuery(function ($) { 
    var $stypes = $(".search_type").hide(); 
    $("#select_search").change(function() { 
     $stypes.hide(); 
     $('#' + $(this).val()).show(); 
    }).change(); 
}); 

演示:Fiddle

0

没有,但你可以做到这一点,像这样:

$(document).ready(function() { 
    $(".search_type").hide(); 
    $("#select_search").change(function() { 
     $(".search_type").hide(); 
     $("#" + $(this).val()).show(); 
    }); 
}); 

这会隐藏与类search_type所有元素则显示选择。

你也可以做一个占位符变量,像这样:

var showing; 

$(document).ready(function() { 
    $(".search_type").hide(); 
    $("#select_search").change(function() { 
     if (showing) {showing.hide();} 
     showing = $("#" + $(this).val()); 
     showing.show(); 
    }); 
}); 
+0

我的回答你的“占位符变量”的例子是行不通的,与_showing.hide行()_会给出错误约_showing_是未定义并在显示所选项目之前停止。 (也可以将_var shown_声明放在文档就绪处理程序中,不需要使其成为全局的。) – nnnnnn

+0

@nnnnnn谢谢我将编辑它。 –

0

我对你的问题有点不清楚,但作为最好的,我可以告诉你想d在选择框中显示与用户选择相对应的一个DIV。如果用户选择不同的选项,您想隐藏以前的显示框,请更正?

我觉得这个样本将帮助您:http://jsfiddle.net/HaMQr/

有一个$.not(object)方法,将采取任何匹配对象是不是你提供一个行动。请参见下面的代码:

$("#select_search").change(function() { 
    var activeBox = $('#' + $(this).val()); 
    activeBox.show(); 

    $('div').not(activeBox).hide();     
});