问题 HTML网页中的选择选项未更新为“已选中”属性


请解释我如何更改选项的“选定”属性? 例如。:

<select id="lang_select">
    <option value="en" selected="selected">english</option>
    <option value="ar">العربية</option>
    <option value="az">azərbaycanlı</option>
    <option value="bg">български</option>
    <option value="ca">català</option>
    <option value="cs">český</option>
    <!-- some data cut -->
</select>

因此,如果我更改下拉列表值,则html-data中没有任何更改。 为什么?

只有当我尝试使用jQuery强制重新加载属性时它才有效。

$(document).on('change',"select",function(){
    var i = $(this)[0].selectedIndex;
    var ch = $(this).children().each(function(index){
        $(this).prop('selected',index == i);
        if (index == i) {
            $(this).attr('selected','selected');
        } else {
            $(this).removeAttr('selected');
        }
    });
});

为什么?我怎么能避免这个?是否可以使用纯HTML更改“选定”?

编辑 我希望在html标签中有这个属性,因为我需要在将来保存和恢复这个html代码的一部分。


5508
2017-08-30 14:02


起源



答案:


更新,替换 .attr("selected", true) 对于 .prop("selected", true)

注意,价值 selected 属性返回 true 要么 false 不是 "selected"

尝试使用选择器 $("option[value=" + this.value + "]", this) ,设置属性 selected 至 true , .siblings() 去除 selected 属性来自 option 未选中的

$(document).on("change","select",function(){
  $("option[value=" + this.value + "]", this)
  .attr("selected", true).siblings()
  .removeAttr("selected")
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="lang_select">
<option value="en"  selected="true">english</option>
<option value="ar">العربية</option>
<option value="az">azərbaycanlı</option>
<option value="bg">български</option>
<option value="ca">català</option>
<option value="cs">český</option>
<!-- some data cut -->

</select>


12
2017-08-30 14:12



此代码不添加“selected”标记属性。但是可以修改此代码以提供正确的结果。如何在一行中正确添加“选定”属性? $(本).attr( '选择', '选择'); - 这段代码。 - Vyacheslav
@trololo查看更新的帖子 - guest271314


答案:


更新,替换 .attr("selected", true) 对于 .prop("selected", true)

注意,价值 selected 属性返回 true 要么 false 不是 "selected"

尝试使用选择器 $("option[value=" + this.value + "]", this) ,设置属性 selected 至 true , .siblings() 去除 selected 属性来自 option 未选中的

$(document).on("change","select",function(){
  $("option[value=" + this.value + "]", this)
  .attr("selected", true).siblings()
  .removeAttr("selected")
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="lang_select">
<option value="en"  selected="true">english</option>
<option value="ar">العربية</option>
<option value="az">azərbaycanlı</option>
<option value="bg">български</option>
<option value="ca">català</option>
<option value="cs">český</option>
<!-- some data cut -->

</select>


12
2017-08-30 14:12



此代码不添加“selected”标记属性。但是可以修改此代码以提供正确的结果。如何在一行中正确添加“选定”属性? $(本).attr( '选择', '选择'); - 这段代码。 - Vyacheslav
@trololo查看更新的帖子 - guest271314


它并没有改变 html 本身但它确实改变了它的价值 select

$('select').change(function(){
    $('#result').html($(this).val());
}).trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="lang_select">
  <option value="en" selected="selected">english</option>
  <option value="ar">العربية</option>
  <option value="az">azərbaycanlı</option>
  <option value="bg">български</option>
  <option value="ca">català</option>
  <option value="cs">český</option>
  <!-- some data cut -->
</select>
<hr />
<div id="result"></div>


2
2017-08-30 14:06



我已经更新了我的问题。我需要'selected'属性才能保存和恢复这部分html代码。 - Vyacheslav
你在哪里保存HTML?你没有保存价值,并在以后设置它? - Mosh Feu
在服务器上。我发送一些当前页面的html代码,以节省用户的当前工作。因此,当用户稍后下载他的作品时,必须选择“选择的选项”。 - Vyacheslav
我认为这是有线的方式(逻辑和安全),但这是我的意见。无论如何,您可以在将属性发送到服务器之前更改属性,我不需要这样做 change 事件。 - Mosh Feu


使用 val() 方法。所以在你的情况下, $("#lang_select").val('en'); 选择英语选项。顺便说一下,如果你想要选择第一个选项,你就不需要了 selected="selected"。默认情况下,会自动选择第一个选项。


0
2017-08-30 14:03



我写的是我在html中需要这个属性。 - Vyacheslav