gpt4 book ai didi

javascript - 更改单选按钮的顺序 : display the checked above the drop down list

转载 作者:行者123 更新时间:2023-12-02 23:10:45 25 4
gpt4 key购买 nike

我希望 3 个 radio 可见,其他 radio 隐藏在下拉菜单中。当从下拉列表中选择一个 radio 时,我希望它移动到可见 radio 中的第一个位置。第三个(或现在是第四个)可见 radio 应移至下拉列表中,以便我始终只有 3 个可见 radio 。

我不能简单地更改标签,因为我在剩余脚本中使用了 radio 的 ID(参见下面 js 脚本中的最后一行):

我只想使用普通 JS (没有 Jquery...)。

这是我的 html:

<div id="sourcecontainer">
<div> From
<div>
<input type="radio" id="fr" name="source" value="fr">
<label for="fr">fr</label>
</div>
<div>
<input type="radio" id="en" name="source" value="en">
<label for="en">en</label>
</div>
<div>
<input type="radio" id="auto" name="source" value="auto" checked>
<label for="auto">auto</label>
</div>
<nav id="topNav">
<a href="#" title="Others" id="othersLanguageSource">Others</a>
<ul id="listothersLanguageSource" style="list-style: none; display:none;">
<li><input type="radio" id="pr1" name="source" value="1">Preset 1</li>
<li><input type="radio" id="pr2" name="source" value="2">Preset 2</li>
<li><input type="radio" id="pr3" name="source" value="3">Preset 3</li>
<li><input type="radio" id="pr4" name="source" value="4">Preset 4</li>
</ul>
</nav>
</div>
<input id="text" type="text" value="" autofocus />
</div>

这是我的js:

... 
var menuTopNav = document.getElementById('topNav');
menuTopNav.addEventListener('mouseover', function () {
var listothersLanguageSource = document.getElementById("listothersLanguageSource")
listothersLanguageSource.style.display = "block";
listothersLanguageSource.style.display = "block";
}, false);
menuTopNav.addEventListener('mouseout', function () {
var listothersLanguageSource = document.getElementById("listothersLanguageSource")
listothersLanguageSource.style.display = "none";
listothersLanguageSource.style.display = "none";
}, false);

var sourceLang = document.querySelector('input[name="source"]:checked').value;
...
...

最佳答案

试试这个

let langs = [
{ id: 'en', value: 'en', text: 'en' },
{ id: 'fr', value: 'fr', text: 'fr' },
{ id: 'auto', value: 'auto', text: 'auto', checked: true },
{ id: 'pr1', value: 'pr1', text: 'Preset 1' },
{ id: 'pr2', value: 'pr2', text: 'Preset 2' },
{ id: 'pr3', value: 'pr3', text: 'Preset 3' }
];

function render() {
let mainLanguageSource = '';
let othersLanguageSource = '';

langs.forEach((item, index) => {
if (index <= 2) {
mainLanguageSource += '<div>'
+ '<input type="radio" id="' + langs[index].id + '" name="source" value="' + langs[index].value + '" ' + (langs[index].checked ? 'checked' : '') + '>'
+ '<label for="' + langs[index].id + '">' + langs[index].text + '</label>'
+ '</div>';
} else {
othersLanguageSource += '<li>'
+ '<input type="radio" id="' + langs[index].id + '" name="source" value="' + langs[index].value + '" ' + (langs[index].checked ? 'checked' : '') + '>'
+ '<label for="' + langs[index].id + '">' + langs[index].text + '</label>'
+ '</li>';
}
});


document
.getElementById('mainLanguageSource')
.innerHTML = mainLanguageSource;

document
.getElementById('listothersLanguageSource')
.innerHTML = othersLanguageSource;

// add event listeners
document.querySelectorAll('[name="source"]').forEach(function(input) {
input.addEventListener('change', function(event) {
let position;

langs.forEach((item, index) => {
if (item.id === event.target.value) {
position = index;
item.checked = true;
} else {
delete item.checked;
}
});

langs.unshift(langs.splice(position, 1)[0]);

render();
});
});
}

render();
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="sourcecontainer">
<div> From
<div id="mainLanguageSource">
<!-- Filled from js -->
</div
<nav id="topNav">
<a href="#" title="Others" id="othersLanguageSource">Others</a>
<ul id="listothersLanguageSource" style="list-style:">
<!-- Filled from js -->
</ul>
</nav>
</div>
<input id="text" type="text" value="" autofocus />
</div>
</body>
</html>

关于javascript - 更改单选按钮的顺序 : display the checked above the drop down list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57374043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com