2010-12-13 140 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所選擇的屬性寫入正確的選擇

相關問題