[英]jQuery displaying select text elsewhere and disappears after page load
目前,我有一些選擇下拉菜單。 我已經做到了,因此無論在中間下拉菜單中選擇了什么選項,它都會顯示為底部下拉菜單的標題/標簽。 這是我在多個HTML頁面上顯示的div。 每次更改中間選項時,底部的標題確實會成功更改為所需的標題,但是一旦加載了頁面,底部的標題/標簽就會消失並返回默認的空白。 如何使標題/標簽即使在頁面加載后也應該是這樣?
HTML:
<div class="form-group">
<label class="col-md-4 control-label">Section:</label>
<div class="col-md-8">
<select id="middle" class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
</div>
</div>
<br /><br />
<div class="form-group">
<label class="col-md-4 control-label" id="output"></label>
<div class="col-md-8">
<select id="bottom" class="form-control">
<option>11</option>
<option>12</option>
<option>13</option>
</select>
</div>
</div>
jQuery的:
$('#middle').change(function() {
$('#output').text($(this).find(":selected").text());
});
刷新頁面后,jQuery不會保存數據或緩存數據。 這就是為什么您沒有獲得價值的原因。
要恢復它,您需要使用Html5 $ cookie。 請用谷歌搜索它的用途。
如果您只想讓#bottom
的標題在每個頁面加載中都說1
,與#middle
select
所說的一樣,則可以使用以下代碼:
$('#middle').change(function() {
$('#output').text($(this).find(":selected") ? $(this).find(":selected").text() : $(this).find(":first").text());
}).change(); //trigger change on pageload
$('#middle').change(function() { $('#output').text($(this).find(":selected") ? $(this).find(":selected").text() : $(this).find(":first").text()); }).change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="form-group"> <label class="col-md-4 control-label">Section:</label> <div class="col-md-8"> <select id="middle" class="form-control"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> </div> </div> <br /><br /> <div class="form-group"> <label class="col-md-4 control-label" id="output"></label> <div class="col-md-8"> <select id="bottom" class="form-control"> <option>11</option> <option>12</option> <option>13</option> </select> </div> </div>
option
,如果存在,則使用其值。 如果沒有選擇的option
,則使用第一個option
的值。 .text()
這段代碼可能看起來有些怪異。 它稱為三元運算符 ,如果您想了解它,請單擊鏈接。 如果瀏覽器支持足以滿足您的目標,則最簡單的選擇是localStorage
。
(我在這里使用sessionStorage
,只是為了localStorage
每個人的localStorage
不會因測試值而腫。)
這將達到目的:
$("#middle").change(function() { var value = $(this).find(":selected").text(); $("#output").text(value); sessionStorage.setItem(this.id, value); }).val(function(){return (sessionStorage.getItem(this.id) ? sessionStorage.getItem(this.id) : $(this).find("option:first").text());}).change(); //set values on pageload
jsfiddle: https ://jsfiddle.net/k3htre4d/2/
codepen: https ://codepen.io/anon/pen/OgOdLZ ? editors = 1010
change
處理程序中,我將select
的ID作為鍵,並將select
的text-value用作值來設置localStorage
。 change
處理程序之后,我使用與select
的ID匹配的localStorage
密鑰(如果該密鑰存在)來設置select
的值。 如果不存在,則使用select
的first option
文本。 return (... ? ... : ...);
。 它稱為三元運算符 ,如果您想了解它,請單擊鏈接。 $("#middle").change(function() { $("#output").text($(this).find(":selected").text()); }); $(".form-control").change(function() { sessionStorage.setItem(this.id, $(this).find(":selected").text()); //store select's value on change }).each(function() { if (sessionStorage.getItem(this.id)) {$(this).val(sessionStorage.getItem(this.id));} //set select's value on pageload }).change(); //trigger change on pageload
jsfiddle: https ://jsfiddle.net/k3htre4d/1/
codepen: https ://codepen.io/anon/pen/dRZayW ? editors = 1010
form-control
類的select
的值都存儲在change
localStorage
中。 所有select
根據其ID在localStorage
獲得自己的密鑰。 因此,現在您不必為每個select
都重復處理程序。 只要確保要存儲其值的每個select
都具有類form-control
(或您選擇的任何類)即可。 select
,然后將該類用作處理程序,而不是.form-control
。 #middle
選擇所使用的代碼在單獨的處理程序中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.