2010-12-13 92 views
1

我用下面的jQuery的函数,在一个DIV进行了slideDown的基础上,选择下拉值:jQuery的选择更改触发

$(function() 
{ 
    $('#show-options').change(function(){ 
     if($(this).val() != '') 
     { 
      $('#' + $(this).val()).slideDown(); 
     } 
    }); 
}); 

HTML:

<select id="show-options"> 
    <option value="">Select an Option</option> 
    <option value="vehicle-type">Vehicle Type</option> 
    <option value="vehicle-colour">Vehicle Colour</option> 
</select> 

<div id="vehicle-type" style="display: none;"> 
    <!--form elements in here--> 
</div> 

<div id="vehicle-colour" style="display: none;"> 
    <!--form elements in here--> 
</div> 

现在,当窗体提交之前显示的任何DIV都需要自动显示。我可以检查我的PHP中的GET变量,但我需要模仿“更改”功能的jQuery代码 - 我认为这与触发器或绑定有关。

回答

4

实际上我做了很多。我发现最简单的方法是结合它像这样以后只触发事件:只要

function showByVal(val) { 
    $('#' + val).slideDown(); 
} 

$(function() 
{ 
    $('#show-options').change(function(){ 
     if($(this).val() != '') 
     { 
      showByVal($(this).val()); 
     } 
    }); 

    showByVal('<? echo $_GET["PreviousVal"]; ?>'); 
}); 

的值设置的时间提前(由你的PHP代码),那么它结合后,事件将触发并设置初始显示。

+0

这是怎么回事工作,如果用户已经显示出超过一板块?您必须遍历每个选择并在将其设置为所选值后触发更改事件。代码似乎没有进行切换,只是显示了已选择的每个部分,因此可以同时打开多个部分。 – tvanfosson 2010-12-13 18:19:03

+0

@tvanfosson - 确实如此,它似乎没有切换,但从问题来看,并非100%清楚OP是回发到同一页面还是回到另一页面。如果他发布到同一页面,并且在发布/刷新后需要显示器保持一致,那么PHP代码可以根据GET变量将'

+0

这是使用GET的搜索表单。它提交到相同的页面。有可能需要显示多个DIV,但这不是问题,因为我可以在我的PHP代码中检查GET变量。 – GSTAR 2010-12-13 18:28:45

0

如果您是在响应表单提交时这么做的,那么当您为显示的那些东西渲染页面时,为什么不简单地显示DIV(即,不要将样式设置为“display:none;”)。您需要保持跟踪,使用隐藏字段将是一种方式,或者只显示那些已经显示并且在所选部分中有一个项目的部分。无论哪种方式,您都可以使用从表单获得的输入来确定哪些部分具有默认的可见性设置。

0

每当我需要做这样的事情,我会做$('#ele').trigger('change')因此不需要做任何特殊的事情,所以当页面加载时它只是触发选择列表的更改事件,只要正确的值设置为页面加载它调用你已经定义的变更处理程序。

1

试试这个:

$("#" + $("#show-options :selected").val()).slideDown(); 
当然

你必须在PHP所选择的属性写入正确的选择

相关问题