Implementing a select element in my form, but unsure how to grab user selection for a list

I have implemented this select list, provided by Volker Otto on Codepen here: http://codepen.io/l4ci/pen/gPjYma/

I find it works perfect for me, however I dont know how to process the user selection for this select list because its not an option list.

any ideas?

Find below markup, css and js:

.select {
  position: relative;
  display: block;
  margin: 0 auto;
  width: 100%;
  max-width: 325px;
  color: #cccccc;
  vertical-align: middle;
  text-align: left;
  user-select: none;
  -webkit-touch-callout: none;
}
.select .placeholder {
  position: relative;
  display: block;
  background-color: #393d41;
  z-index: 1;
  padding: 1em;
  border-radius: 2px;
  cursor: pointer;
}
.select .placeholder:hover {
  background: #34383c;
}
.select .placeholder:after {
  position: absolute;
  right: 1em;
  top: 50%;
  transform: translateY(-50%);
  font-family: 'FontAwesome';
  content: '\f078';
  z-index: 10;
}
.select.is-open .placeholder:after {
  content: '\f077';
}
.select.is-open ul {
  display: block;
}
.select ul {
  display: none;
  position: absolute;
  overflow: hidden;
  width: 100%;
  background: #fff;
  border-radius: 2px;
  top: 100%;
  left: 0;
  list-style: none;
  margin: 5px 0 0 0;
  padding: 0;
  z-index: 100;
}
.select ul li {
  display: block;
  text-align: left;
  padding: 0.8em 1em 0.8em 1em;
  color: #999;
  cursor: pointer;
}
.select ul li:hover {
  background: #4ebbf0;
  color: #fff;
}

$('.select').on('click','.placeholder',function(){
  var parent = $(this).closest('.select');
  if ( ! parent.hasClass('is-open')){
    parent.addClass('is-open');
    $('.select.is-open').not(parent).removeClass('is-open');
  }else{
    parent.removeClass('is-open');
  }
}).on('click','ul>li',function(){
  var parent = $(this).closest('.select');
  parent.removeClass('is-open').find('.placeholder').text( $(this).text() );
});

$('.select').on('click', '.placeholder', function() {
  var parent = $(this).closest('.select');
  if (!parent.hasClass('is-open')) {
    parent.addClass('is-open');
    $('.select.is-open').not(parent).removeClass('is-open');
  } else {
    parent.removeClass('is-open');
  }
}).on('click', 'ul>li', function() {
  var parent = $(this).closest('.select');
  parent.removeClass('is-open').find('.placeholder').text($(this).text());
});
@import 'https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css';
 *,
*:after,
*:before {
  box-sizing: border-box;
}
html {
  box-sizing: inherit;
  background: linear-gradient(to left, #8e9eab, #eef2f3);
}
body {
  margin: 10% auto;
  text-align: center;
  font-size: 12px;
}
.select {
  position: relative;
  display: block;
  margin: 0 auto;
  width: 100%;
  max-width: 325px;
  color: #cccccc;
  vertical-align: middle;
  text-align: left;
  user-select: none;
  -webkit-touch-callout: none;
}
.select .placeholder {
  position: relative;
  display: block;
  background-color: #393d41;
  z-index: 1;
  padding: 1em;
  border-radius: 2px;
  cursor: pointer;
}
.select .placeholder:hover {
  background: #34383c;
}
.select .placeholder:after {
  position: absolute;
  right: 1em;
  top: 50%;
  transform: translateY(-50%);
  font-family: 'FontAwesome';
  content: '\f078';
  z-index: 10;
}
.select.is-open .placeholder:after {
  content: '\f077';
}
.select.is-open ul {
  display: block;
}
.select.select--white .placeholder {
  background: #fff;
  color: #999;
}
.select.select--white .placeholder:hover {
  background: #fafafa;
}
.select ul {
  display: none;
  position: absolute;
  overflow: hidden;
  width: 100%;
  background: #fff;
  border-radius: 2px;
  top: 100%;
  left: 0;
  list-style: none;
  margin: 5px 0 0 0;
  padding: 0;
  z-index: 100;
}
.select ul li {
  display: block;
  text-align: left;
  padding: 0.8em 1em 0.8em 1em;
  color: #999;
  cursor: pointer;
}
.select ul li:hover {
  background: #4ebbf0;
  color: #fff;
}
<div class="select">
  <span class="placeholder">Select your language</span>
  <ul>
    <li>Espa?a- Espa?ol</li>
    <li>United States - English</li>
    <li>France - Fran?ais</li>
    <li>Deutschland - Deutsch</li>
  </ul>
</div>

<br>

<div class="select select--white">
  <span class="placeholder">Select your language</span>
  <ul>
    <li>Espa?a- Espa?ol</li>
    <li>United States - English</li>
    <li>France - Fran?ais</li>
    <li>Deutschland - Deutsch</li>
  </ul>
</div>

Answers 1

  • $('.select').on('click', '.placeholder', function() {
      var parent = $(this).closest('.select');
      if (!parent.hasClass('is-open')) {
        parent.addClass('is-open');
        $('.select.is-open').not(parent).removeClass('is-open');
      } else {
        parent.removeClass('is-open');
      }
    }).on('click', 'ul>li', function() {
      
      alert($(this).text())//this is the value of the text you selected
      var parent = $(this).closest('.select');
      parent.removeClass('is-open').find('.placeholder').text($(this).text());
    });
    @import 'https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css';
     *,
    *:after,
    *:before {
      box-sizing: border-box;
    }
    html {
      box-sizing: inherit;
      background: linear-gradient(to left, #8e9eab, #eef2f3);
    }
    body {
      margin: 10% auto;
      text-align: center;
      font-size: 12px;
    }
    .select {
      position: relative;
      display: block;
      margin: 0 auto;
      width: 100%;
      max-width: 325px;
      color: #cccccc;
      vertical-align: middle;
      text-align: left;
      user-select: none;
      -webkit-touch-callout: none;
    }
    .select .placeholder {
      position: relative;
      display: block;
      background-color: #393d41;
      z-index: 1;
      padding: 1em;
      border-radius: 2px;
      cursor: pointer;
    }
    .select .placeholder:hover {
      background: #34383c;
    }
    .select .placeholder:after {
      position: absolute;
      right: 1em;
      top: 50%;
      transform: translateY(-50%);
      font-family: 'FontAwesome';
      content: '\f078';
      z-index: 10;
    }
    .select.is-open .placeholder:after {
      content: '\f077';
    }
    .select.is-open ul {
      display: block;
    }
    .select.select--white .placeholder {
      background: #fff;
      color: #999;
    }
    .select.select--white .placeholder:hover {
      background: #fafafa;
    }
    .select ul {
      display: none;
      position: absolute;
      overflow: hidden;
      width: 100%;
      background: #fff;
      border-radius: 2px;
      top: 100%;
      left: 0;
      list-style: none;
      margin: 5px 0 0 0;
      padding: 0;
      z-index: 100;
    }
    .select ul li {
      display: block;
      text-align: left;
      padding: 0.8em 1em 0.8em 1em;
      color: #999;
      cursor: pointer;
    }
    .select ul li:hover {
      background: #4ebbf0;
      color: #fff;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- You did not include this on your OP -->
    <div class="select">
      <span class="placeholder">Select your language</span>
      <ul>
        <li>Espa?a- Espa?ol</li>
        <li>United States - English</li>
        <li>France - Fran?ais</li>
        <li>Deutschland - Deutsch</li>
      </ul>
    </div>
    
    <br>
    
    <div class="select select--white">
      <span class="placeholder">Select your language</span>
      <ul>
        <li>Espa?a- Espa?ol</li>
        <li>United States - English</li>
        <li>France - Fran?ais</li>
        <li>Deutschland - Deutsch</li>
      </ul>
    </div>

    I added the alert where you are setting the value check the comment in code


Related Articles