Le menu en cascade infini est une méthode d'interaction frontale très courante et est largement utilisé dans de nombreux scénarios. Cet article vous présentera comment utiliser JavaScript pour implémenter des menus en cascade infinis. J'espère que cela vous sera utile.
1. Idées d'implémentation
L'idée d'implémenter des menus en cascade infinis sur le front-end peut être résumée ainsi :
<body> <form> <select id="province" onchange="changeProvince()"> <option value="">请选择省份</option> <option value="1">浙江</option> <option value="2">江苏</option> </select> <select id="city" onchange="changeCity()"></select> <select id="area"></select> </form> </body>
var menuData = { "province": { "1": "杭州市", "2": "温州市" }, "city": { "1": { "11": "西湖区", "12": "江干区" }, "2": { "21": "鹿城区", "22": "瓯海区" } }, "area": { "11": { "111": "西溪湿地", "112": "灵隐寺" }, "12": { "121": "杭州大厦", "122": "江干公园" }, "21": { "211": "南湖", "212": "红旗广场" }, "22": { "221": "瓯海公园", "222": "龙湾湾国际商务区" } } } var level = ["province", "city", "area"]; var selectedValue = ["", "", ""]; function init() { generateMenu("province", "1"); } function changeProvince() { selectedValue[0] = document.getElementById("province").value; document.getElementById("city").innerHTML = ""; document.getElementById("area").innerHTML = ""; generateMenu("city", selectedValue[0]); } function changeCity() { selectedValue[1] = document.getElementById("city").value; document.getElementById("area").innerHTML = ""; generateMenu("area", selectedValue[1]); } function generateMenu(currentLevel, currentValue) { var select = document.createElement("select"); select.setAttribute("id", currentLevel); select.setAttribute("onchange", "change" + currentLevel.charAt(0).toUpperCase() + currentLevel.slice(1) + "()"); var option = document.createElement("option"); option.setAttribute("value", ""); option.innerHTML = "请选择" + currentLevel; select.appendChild(option); var submenu = menuData[currentLevel]; for (var key in submenu) { if (submenu[key] != null) { var option = document.createElement("option"); option.setAttribute("value", key); option.innerHTML = submenu[key]; select.appendChild(option); } } document.getElementById(currentLevel).appendChild(select); if (currentValue != "") { document.getElementById(currentLevel).value = currentValue; if (level.indexOf(currentLevel) < level.length - 1) { var nextLevel = level[level.indexOf(currentLevel) + 1]; generateMenu(nextLevel, selectedValue[level.indexOf(nextLevel)]); } } } init();
Ensuite, deux fonctions, changeProvince et changeCity, sont définies pour mettre à jour les valeurs de la province et de la ville sélectionnées, et régénérer le menu du niveau suivant.
Enfin, la fonction generateMenu est définie, qui est utilisée pour générer le menu du niveau actuel et effectuer des appels récursifs au niveau suivant. Lors du processus de génération du menu, la balise de sélection est générée et l'option correspondante est ajoutée, puis ajoutée au DOM une fois le rendu de chaque menu terminé. Si le niveau actuel n'est pas le dernier niveau, alors un appel récursif est effectué sur la base de la valeur actuellement sélectionnée jusqu'à ce que tous les niveaux de menus soient générés.
3. Résumé
Grâce à l'implémentation du code ci-dessus, nous pouvons voir qu'il n'est pas difficile d'implémenter des menus en cascade infinis en JavaScript. La méthode de mise en œuvre présentée dans cet article est une méthode de mise en œuvre relativement basique. Pour différents besoins, elle doit être ajustée en conséquence en fonction de la situation réelle.
Bien sûr, il existe déjà des bibliothèques tierces relativement matures qui peuvent être utilisées pour implémenter des menus en cascade illimités, telles que jQuery et Vue.js, qui peuvent implémenter cette fonction plus facilement. Cependant, nous devons toujours comprendre comment utiliser ces bibliothèques sur la base de la maîtrise des principes, afin de pouvoir utiliser ces outils avec plus de flexibilité pour accomplir diverses tâches complexes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!