【问题标题】:Filter colours with checkbox input in JavaScript在 JavaScript 中使用复选框输入过滤颜色
【发布时间】:2014-12-20 17:21:51
【问题描述】:

我正在学习网络开发,并且正在做一个关于旅行社的项目。在家里,我有一张很大的世界地图,每个国家都是一个形象,都有一个班级。我想要做的是,当您检查输入(例如“低成本”)时,有航班成本不超过 180 欧元的国家/地区会将其颜色变为绿色。默认情况下,它们具有橙色。我已经创建了图像和输入,并且我已经制作了 JavaScript 代码,但是由于颜色没有改变并且控制台中没有错误,所以有些东西不起作用。所以如果你能帮我一点点,我会很高兴的。

我分享 html、css 和 JavaScript 代码。

HTML

var vuelosfrance= {"VuelosFrancia":
                    [

                        {"city":"Paris",
                        "dates":
                            [
                                {"fecha": "15/10/2014","precio": 185 },
                                {"fecha": "16/10/2014","precio": 200 },
                                {"fecha": "19/10/2014","precio": 225 }
                            ]
                        },
                        {"city":"Marsella",
                        "dates":
                            [
                                {"fecha": "15/10/2014","precio": 195 },
                                {"fecha": "18/10/2014","precio": 230 },
                                {"fecha": "20/10/2014","precio": 220 }
                            ]
                        },  
                        
                    ]
                }

// var VuelosSpain = JSON.parse(vuelosspain)


var lowcost = document.getElementById('checkbox_lowcost');

var espana = document.getElementsByClassName('spain');
var espanagreen = document.getElementsByClassName('spaingreen');

function filtrar() {
console.log('a')
        for(i in vuelosspain["VuelosSpain"]) { 
            console.log('b');
            
            for(x in vuelosspain["VuelosSpain"][i]["dates"]) {
                var precio = vuelosspain["VuelosSpain"][i]["dates"][x]["precio"];
                console.log('c')
                if (precio.value < 180) {
                    console.log('d');
                    espana[0].className('spain display');
                    espanagreen[0].className('spaingreen')

                } 
            }
    }
}

if (lowcost.checked == true) {
console.log('e')   filtrar(); };
body {
width: 100%;
height: 1300px;
background-image: url(../images/nubes.jpg);
background-size: 100% 100%
}

.bd {
width: 75%;
margin-left: 75px;
position: relative; }

#checkbox_id {
display:inline-block;
vertical-align: top; }

#mapamundo {
display: block; }
.spain {
display: block;
position: absolute;
top: 24.4%;
left: 41.9%; }

.spaingreen {
display: block;
position: absolute;
top: 24.4%;
left: 41.9%; }



.portugal {
display: block;
position: absolute;
top: 26.75%;
left: 41.4%; }

.francia {
display: block;
position: absolute;
top: 20.1%;
left: 43.6%; }
<header><img src="../images/logo2dms300.png"></header>
       
   <ul id="menu">
              <li>
               <p>Cost</p>
                   <ul>
                       <li><input type="checkbox" name="checkbox" id="checkbox_lowcost" value="value"><p class="textfilters">Low Cost</p></li>
                       <li><input type="checkbox" name="checkbox" id="checkbox_mediumcost" value="value"><p class="textfilters">Medium Cost</p></li>
                       <li><input type="checkbox" name="checkbox" id="checkbox_highcost" value="value"><p class="textfilters">High Cost</p></li>
                   </ul>
   
           </li>
           <li>
               <p>Theme</p>
                   <ul>
                       <li><input type="checkbox" name="checkbox" id="checkbox_id" value="value"><p class="textfilters">Adventure</p></li>
                       <li><input type="checkbox" name="checkbox" id="checkbox_id" value="value"><p class="textfilters">Sun & Beach</p></li>
                       <li><input type="checkbox" name="checkbox" id="checkbox_id" value="value"><p class="textfilters">Snow</p></li>
                       <li><input type="checkbox" name="checkbox" id="checkbox_id" value="value"><p class="textfilters">Relax</p></li>
                   </ul>
   
           </li>
   </ul>
   

<section class="bd ilblock">
   <img src="../images/mapas/mapamundidefinitivo.svg.png" id="mapamundo">
   <img src="../images/mapas/spain36default.png" class="spain ">
   <img src="../images/mapas/spain36green.png" class="spaingreen display">
   <img src="../images/mapas/portugal18default.png" class="portugal display">
   <img src="../images/mapas/portugal18green.png" class="portugal">
   <img src="../images/mapas/francia31default.png" class="francia display">
   <img src="../images/mapas/francia31green.png" class="francia">
</section>

【问题讨论】:

  • 只调试代码真的很难。请做一个JSfiddle。以便我们更好地回复

标签: javascript html css image input


【解决方案1】:

哇,这代码真的很难看,但如果你想根据复选框更改国家/地区,试试这个:

var checkbox = document.querySelector("input[type='checkbox']");
var cheapCountries = document.getElementsByClassName("cheap");

checkbox.addEventListener("click", function() {
    if (this.checked) {
        for (var i=0; i < cheapCountries.length; i++) {
            cheapCountries[i].style.background = "green";            
        }
    }
    else {
        for (var i=0; i < cheapCountries.length; i++) {
            cheapCountries[i].style.background = "orange";            
        }   
    }
});

只是一个简单的复选框处理程序,它可以找到您在地图上具有类名 = 便宜的所有国家 (div),然后更改它们的背景颜色。或者你可以使用 addClass 和 removeClass。

希望有帮助!

【讨论】:

  • 非常感谢,它看起来很不错,但不幸的是我不得不用 JavaScript 来做。顺便说一句,我不知道 (".cheap") 是从哪里来的。是类吗??
  • 哦,好吧,我更新到 vanilla js.. 是的,当您单击便宜(或低成本)复选框时,您可以将它放在您想要突出显示的每个国家/地区。
  • 好吧我现在有另一个问题:(问题是便宜是国家在我的html中没有的一个类,因为我需要当我的复选框被选中时机器在数据库中查找航班的价格并据此执行颜色更改。这就是为什么我创建了一个名为 VuelosSpain 的对象和一个名为 vuelosspain 的变量,其中包含属性“precio”中的这些日期。
猜你喜欢
  • 1970-01-01
  • 2014-01-11
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2013-05-12
  • 2021-10-29
  • 2013-04-21
相关资源
最近更新 更多