2017-05-30 42 views
0

我的頁面上有多個選擇,每個選項都有多個選項。 但是,如果我選擇一個選項,則該選項的屬性selected未更新。這不應該自動發生?!HTML - 所選選項的選定屬性未自動更新

例子:

<select id="browsers"> 
 
    <option value="Firefox">Bing</option> 
 
    <option value="InternetExplorer" selected="selected">Internet Explorer</option> 
 
    <option value="Chrome">Chrome</option> 
 
</select>

通過檢查與開發者控制檯中的DOM,你應該看到,所選擇的屬性不選擇其他選項後,甚至改變。

但是我找到了解決方法。爲了解決這個問題,我們可以使用此代碼:

$(document).on("change","select",function() { 
    $("option[value=" + this.value + "]", this) 
     .attr("selected", true).siblings() 
     .removeAttr("selected") 
}); 

例子:

$(document).on("change","select",function() { 
 
    \t $("option[value=" + this.value + "]", this) 
 
    \t \t .attr("selected", true).siblings() 
 
    \t \t .removeAttr("selected") 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="browsers"> 
 
     <option value="Firefox">Bing</option> 
 
     <option value="InternetExplorer" selected="selected">Internet Explorer</option> 
 
     <option value="Chrome">Chrome</option> 
 
    </select>

這工作的一種。但是,如果我選擇另一個選項而不是默認選項,例如Chrome瀏覽器並重新加載頁面,然後即使在重新加載後仍然選擇Chrome瀏覽器,但所選屬性仍指向Internet Explorer!

哪個是解決此問題的最佳方法? 我的想法是運行$(document).ready()上的所有選擇並選擇所選屬性指向的選項。

但爲什麼這一切都不會自動發生? 它是一個錯誤還是一個特徵?

+0

嘗試使用'prop',而不是'attr':https://api.jquery.com/prop/ – josec89

+0

'prop'使事情變得更糟。 – Black

+0

你不應該在意開發者工具是否告訴你它有'selected'屬性。如果您嘗試使用$(選項).prop('selected')'將在所選選項上返回true。你想達到什麼目的? '$(select)val()'無論如何都會給你選擇的選項 – josec89

回答

1

selected屬性定義是否應在pageload上選擇一個元素。如果您使用select元素髮布表單,則所選的選項將是發佈的選項,而不管最初選定的元素。

你需要什麼selected -attribute for your case?

編輯:根據您的意見,我做了一個小提琴

小提琴1https://jsfiddle.net/q3fpafov/1選擇像你想

小提琴2https://jsfiddle.net/bge9bsa7/2/僅顯示所選擇的語言文件可用

我希望它在某些方面符合你的要求。 當您重新加載時仍然選擇您的選項的原因是基於瀏覽器的。但是selected-attribute對於該選項的可用性沒有任何作用。此外,它不會改變,因爲您不會改變HTML元素本身呈現的方式(在頁面加載時)

+0

我需要選定的屬性根據前端中選定的語言設置選項。例如。我有一個下載門戶。如果選擇德語,那麼我的選擇應指向指向德語文件的德語選項。 – Black

+0

那麼你有選擇的語言,或只是爲了其他的事情?或者語言存儲在某個地方? – LaughingMan

+0

我有多個文件,例如不同語言的手冊。用戶應該選擇他想下載哪種語言的手冊,因此他必須使用該選擇。但是,如果前端的語言設置爲「英文」,則所有選項都指向提供英文手冊的選項。 – Black

1

注意:selected =「selected」不是必要的,只需選中屬性將工作以及。

當出現時,選擇屬性指定應該預先選擇select中的選項當頁面加載時。

此外,預先選擇的選項將首先顯示在下拉列表

這2個只應該是所選屬性的效果。 請注意關鍵字 - 頁面加載時。當瀏覽器加載頁面時,他不在或不在。

如果你想使它動態化,你需要使用JavaScript。你想用這個做什麼?在重新加載頁面或以編程方式在頁面加載後選擇正確的元素時,是否在正確的元素上選擇了屬性?

如果你只是想使元素選擇有更簡單的方法低谷任一值:

jQuery("#browsers[value='the value of the one you like']").attr('selected','selected'); 

或者通過索引(頭腦,指數從0開始而不是1):

document.getElementById("browsers").selectedIndex = "2"; 
1

您可以檢查selectvalue當它改變時,看看它已被改變。

var select = document.getElementById('browsers'); 
 
select.addEventListener('change', function(e) { 
 
    localStorage.setItem('browser', this.value); 
 
}); 
 

 
var browser = localStorage.getItem('browser'); 
 
if (browser) { 
 
    select.value = browser; 
 
}
<select id="browsers"> 
 
    <option value="Firefox">Firefox</option> 
 
    <option value="InternetExplorer" selected="selected">Internet Explorer</option> 
 
    <option value="Chrome">Chrome</option> 
 
</select>

編輯

所以,我錯過了有關存儲值的一部分,所以它仍然存在時重新加載頁面,並根據OP的使用情況下,我會建議使用localStorage在更改時保存該值,並在頁面重新加載時從中讀取。 我已編輯片段,以反映這個(代碼簡化)

+0

但是這不會解決重裝問題,因爲值只會在更改時更新。但我已經通過每次調用一個函數來解決它,如果我需要找出選擇哪個選項。 – Black

+0

是的,我錯過了所有的東西。 根據OP的要求,'localStorage'可能是一個選項。 –

1

問題之前曾是該選擇一個選項,並重新加載頁面後,選擇了頁面重載期間被記住的,即使屬性selected指出,另一種選擇。

我通過每次調用下面的函數來解決它。該功能即使在頁面重新載入後也能找出真正選擇的選項

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select class="downloadSelect" id="select_179"> 
 
    <option value="-">Please select</option> 
 
    <option value="link_2748" selected="selected">Deutsch</option> \t \t \t \t \t \t \t \t \t 
 
    <option value="link_2749">Chinese</option> 
 
</select> 
 

 
<button onclick="return showSelectedOption('select_179');">Show Option Text</button> 
 

 
<script> 
 
function showSelectedOption(pSelectID) 
 
{ 
 
    var text; 
 
    
 
    $("#"+pSelectID) 
 
    \t .find("option") 
 
     .each(function(){ 
 
    \t \t if ($(this).prop("selected")) { 
 
     \t 
 
     \t text = $(this).text(); 
 
     } 
 
    }); 
 
    console.log(text); 
 
} 
 
</script>

+1

「之前的問題是,在選擇一個選項並重新加載頁面後,該選項在頁面重新加載期間被記住」。我終於明白你的意思了。我認爲這個問題是「相反的」。啊,語言障礙! – LaughingMan

+0

是的,它很混亂。 Thx爲你的嘗試,雖然:) – Black

+1

是的,現在我們都可以有一個良好的'