下拉选择器

时间:2017-06-14 09:40:53

标签: javascript jquery html

我正在构建车辆选择器的一些帮助,遗憾的是我对JQuery没有最大的把握,所以不太确定如何完成后续步骤。目前它是功能性的并且能够选择车辆并产生链接,但链接依赖于构成字符串的数据,即“http://www.web.com.au/store/vehicle-search/BMW-318i-2005

我最终需要一种方法来为每个车辆选项分配一个ID号,以便链接看起来更像“http://www.web.com.au/store/vehicle-search/BMW/[UNIQUEID#]”,其中唯一ID是分配给每个车辆选择的号码,但根据链接,我会仍然希望保留车辆公司的名称。

我最终会得到200个不同的ID,因为每个制作模型和年份都有很多组合。这可能吗?

var makeObject = {
  "BMW": {
    "318i": ["2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998"],
  },
  "Daewoo": {
    "Lanos": ["2003", "2002", "2001", "2000", "1999", "1998", "1997"],
  },
  "Ford": {
    "Courier PC-PD": ["1999", "1998", "1997", "1996", "1995", "1994", "1993", "1992", "1991"],
    "Courier PE-PG-PH Petrol": ["2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997"],
    "Courier PE-PG-PH Diesel": ["2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997"],
    "Falcon EF": ["1996", "1995", "1994"],
    "Falcon EL": ["1998", "1997", "1996"],
    "Falcon AU1": ["2000", "1999", "1998"],
    "Falcon AU2": ["2002", "2001", "2000"],
    "Falcon AU3": ["2002", "2001"],
    "Falcon BA-6": ["2005", "2004", "2003", "2002"],
    "Falcon BA-8": ["2005", "2004", "2003", "2002"],
    "Falcon BF": ["2011", "2010", "2009", "2008", "2007", "2006", "2005"],
    "Falcon FG": ["2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008"],
  },
  "Holden": {
    "Commodore": ["2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "Commodore2": ["2010", "2009", "2008", "2007", "2006", "2005"]
  },
  "Honda": {
    "Accord": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997", "1996", "1995", "1996", "1995", "1994"],
  },
  "Hyundai": {
    "Accent": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006"],
  },
  "Isuzu": {
    "D-Max": ["2002", "2001", "2000", "1999"],
  },
  "Kia": {
    "Optima": ["2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004", "2003", "2002", "2001"],
    "Rio": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006"]
  },
  "Lexus": {
    "IS250": ["2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006"]
  },
  "Mazda": {
    "Mazda 3": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007", "2006", "2005", "2004"]
  },
  "Mitsubishi": {
    "Lancer": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009", "2008"]
  },
  "Nissan": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"]
  },
  "Peugeot": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"]
  },
  "Subaru": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Coupe": ["2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Roadster": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"],
    "370Z Coupe": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009"],
    "370Z Roadster": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"]
  },
  "Suzuki": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Coupe": ["2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Roadster": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"],
    "370Z Coupe": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009"],
    "370Z Roadster": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"]
  },
  "Toyota": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Coupe": ["2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z Roadster": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"],
    "370Z Coupe": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009"],
    "370Z Roadster": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"]
  },
  "Alfa-Romeo": {
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z": ["2008", "2007", "2006", "2005", "2004", "2003"],
    "350Z": ["2009", "2008", "2007", "2006", "2005", "2004", "2003"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010", "2009"],
    "370Z": ["2016", "2015", "2014", "2013", "2012", "2011", "2010"]
  }
}

window.onload = function() {
  var makeSel = document.getElementById("makeSel"),
    modelSel = document.getElementById("modelSel"),
    yearSel = document.getElementById("yearSel");
  for (var make in makeObject) {
    makeSel.options[makeSel.options.length] = new Option(make, make);
  }

  makeSel.onchange = function() {
    modelSel.length = 1; // remove all options bar first
    yearSel.length = 1; // remove all options bar first
    if (this.selectedIndex < 1) return; // done   
    for (var model in makeObject[this.value]) {
      modelSel.options[modelSel.options.length] = new Option(model, model);
    }
  }

  makeSel.onchange(); // reset in case page is reloaded
  modelSel.onchange = function() {
    yearSel.length = 1; // remove all options bar first
    if (this.selectedIndex < 1) return; // done   
    var years = makeObject[makeSel.value][this.value];
    for (var i = 0; i < years.length; i++) {
      yearSel.options[yearSel.options.length] = new Option(years[i], years[i]);
    }
  }
}

function buildUrl() {
  var url = "http://www.web.com.au";
  var make = document.querySelector('#makeSel').value;
  var model = document.querySelector('#modelSel').value;
  var year = document.querySelector('#yearSel').value;
  var qs = encodeURIComponent(make + '-' + model + '-' + year);
  if (qs.length > 0) {
    url = url + "/store/vehicle-search/" + qs;
  }
  return url;
}
ul {
  list-style: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>

<div class="dynamic-dropdown">
  <form name="myform" id="myForm">
    <h3 id="dropdown-h3">Quick Search</h3>
    <ul>
      <li>
        <select name="optone" id="makeSel" size="1">
    <option value="" selected="selected">Select make</option>
    </select>
      </li>
      <li>
        <select name="opttwo" id="modelSel" size="1">
    <option value="" selected="selected">Select model</option>
    </select>
      </li>
      <li>
        <select name="optthree" id="yearSel" size="1">
    <option value="" selected="selected">Select year</option>
    </select>
      </li>
      <a href="javascript:window.location.assign(buildUrl());"><img src="/garage/Parts-2.png" /></a>
    </ul>
  </form>
</div>

1 个答案:

答案 0 :(得分:1)

var lookUpID = { "BMW-318i-2005":"5014521", "BMW-318i-2004":"5014520", ...}

var qs = make+"/" + lookupID[make + '-' + model + '-' + year];

也请使用

window.onload = function() {
  var makeSel = document.getElementById("makeSel"),
  ...;

  document.querySelector("#buildURLLink").onclick=function(e) { 
    e.preventDefault(); 
    location = buildUrl(); 
  }  
}

 <a href="turnonjavascript.html" id="buildURLLink"><img src="/garage/Parts-2.png" /></a>