๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ด์•ผ๊ธฐ/JS

select ํƒœ๊ทธ ์ปค์Šคํ…€ / button ํƒœ๊ทธ๋กœ Select ๊ตฌํ˜„ ํ›„ value ์ž๋ฐ”๋กœ ๊ฐ€์ ธ๊ฐ€๊ธฐ

by 0_0๐Ÿ–ค 2023. 8. 3.
๋ฐ˜์‘ํ˜•

 

 

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ํšŒ์›๋“ฑ๋ก ํŽ˜์ด์ง€ ํ”„๋ก ํŠธ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ 

select ํƒœ๊ทธ option ํƒœ๊ทธ ๋””์ž์ธ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„ ์ปค์Šคํ…€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์œผ๋‚˜..

ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฐ–์—๋Š” ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

https://jqueryniceselect.hernansartorio.com/

 

jQuery Nice Select

Usage 1. Include jQuery and the plugin. 2. Include the plugin styles, either the compiled CSS... ...or, ideally, import the SASS source (if you use SASS) in your main stylesheet for easier customization. @import 'nice-select'; // Or 'nice-select-prefixed'.

jqueryniceselect.hernansartorio.com

 

 

๊ทธ๋Ÿฐ๋ฐ ์ฐพ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋Œ€์ค‘์ ์œผ๋กœ ์ด์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋„ ์•Š๊ณ 

์ด ์ฝ˜ํ…์ธ  ํ•˜๋‚˜ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์“ฐ๋Š” ๊ฒƒ์€ ์›ํ•˜์ง€ ์•Š์•˜๋‹ค.

js๋‚˜ jQuery๋งŒ์œผ๋กœ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ์ฐพ์•„๋ณด๋˜ ์ค‘,

๋„ค์ด๋ฒ„ ํšŒ์›๊ฐ€์ž…์ฐฝ์— ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์žํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋™์ผํ•˜๊ฒŒ ์กด์žฌํ–ˆ๊ณ 

select ํƒœ๊ทธ๊ฐ€ ์•„๋‹Œ divํƒœ๊ทธ, li ๊ตฌ์กฐ ๋‚ด์— button ํƒœ๊ทธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค!!

 

 

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ํผ๊ณผ ๋น„์Šทํ•œ ํ†ต์‹ ์‚ฌ ์„ ํƒ ํผ

 

๋„ค์ด๋ฒ„ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ์ž๋„๊ตฌ ์ฝ”๋“œ ์†Œ์Šค, button ์š”์†Œ๋กœ ์ œ์ž‘๋˜์–ด ์žˆ๋‹ค.

 

๋‚˜์ค‘์— button ํƒœ๊ทธ ์•ˆ์˜ ๊ฐ’์„ ์–ด๋–ค ์‹์œผ๋กœ java๋กœ ๊ฐ€์ ธ๊ฐˆ์ง€๋Š” ์•Œ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ 

์ด ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์œผ๋‹ˆ ๋””์ž์ธ ์ž…ํžˆ๊ณ  ๋‚˜์ค‘์— ์–ด๋–ป๊ฒŒ๋“  ๋˜๊ฒ ์ง€ ~ ํ•˜๋Š” ์ƒ๊ฐ์œผ๋กœ

ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด ๋น„์Šทํ•œ ๊ตฌ์กฐ๋กœ ๋””์ž์ธ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค ... ๐Ÿ™„

 

 

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ํ†ต์‹ ์‚ฌ select ์˜์—ญ :)

 

<section class="input_area">
    <div>
      <!-- checked ๋˜์žˆ๋Š” option ํƒœ๊ทธ ์—ญํ• ์„ ํ•  button ํƒœ๊ทธ -->
      <button type="button" aria-expanded="false" class="toggle_btn">
        ํ†ต์‹ ์‚ฌ 
      </button> 
      <!-- ํ•˜์œ„ option ํƒœ๊ทธ ์˜์—ญ -->
      <ul class="telecom_area">
        <li>
          <button type="button" name="userTelecom" class="option_btn" value="kt">KT</button>  
        </li>
        <li>
          <button type="button" name="userTelecom" class="option_btn" value="skt">SKT</button>
        </li>
        <li>
          <button type="button" name="userTelecom" class="option_btn" value="lg">LG</button> 
        </li>
      </ul>
    </div>
    <!-- ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ ์˜์—ญ -->
    <input type="text" placeholder="์ „ํ™”๋ฒˆํ˜ธ"
      onfocus="this.placeholder=''"
      onblur="this.placeholder='์ „ํ™”๋ฒˆํ˜ธ'"
      oninput="hypenTel(this)" maxlength="13"
    name="userTel">
</section>

 

 

 

html ๊ณผ css๋กœ ๋””์ž์ธ ๊ตฌํ˜„์€ ์‰ฌ์› ๋‹ค! ๊ทธ๋Ÿฐ๋ฐ select ํƒœ๊ทธ์™€ option ํƒœ๊ทธ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ† ๊ธ€ ๊ธฐ๋Šฅ์ด ์ด๋Ÿฐ์‹์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค..

 

select ํƒœ๊ทธ์ฒ˜๋Ÿผ select ์˜์—ญ์„ ํด๋ฆญํ•˜๋ฉด ํ•˜์œ„์˜ option ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๊ณ 

ํ•˜์œ„ option ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ†ต์‹ ์‚ฌ๋ผ๊ณ  ์ ํ˜€์ ธ ์žˆ๋Š” ๋ถ€๋ถ„์ด ํด๋ฆญํ•œ ๋ฉ”๋‰ด์˜ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค.

 

๊ฐ€์žฅ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€

 aria-expended ๋ผ๋Š” ์†์„ฑ์„ ์•Œ๊ฒŒ ๋˜์–ด, aria-expended ์†์„ฑ์„ ์ด์šฉํ•ด ํ†ต์‹ ์‚ฌ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ kt, skt, lg ํ•˜์œ„ ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ด๋„๋ก  jQuery๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ ์™„๋ฃŒํ–ˆ๋‹ค. ( ์ฐธ๊ณ  ์‚ฌ์ดํŠธ์˜€๋˜ ๋„ค์ด๋ฒ„๋„ ์ด ์†์„ฑ์„ ์ด์šฉํ•ด ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ๋‹ค.)

 

 

 

<button type="button" aria-expanded="false" class="toggle_btn">
    ํ†ต์‹ ์‚ฌ 
</button>

 

 


// TELECOM ์˜์—ญ ํ† ๊ธ€
$(".toggle_btn").click(function(e) {
  $(this).toggleClass("on");
  e.stopPropagation();
  if ($(this).attr("aria-expanded")) {
    $(this).attr("aria-expanded", "false");
    $(this).siblings('.telecom_area').css({'display':'none'});
  } else {
    $(this).attr("aria-expanded", "true");
    $(this).siblings('.telecom_area').css({'display':'flex'});
  }
})

 

 

ํ†ต์‹ ์‚ฌ ๋ฒ„ํŠผ ์š”์†Œ์— aria-expanded ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ๋ณธ value๋ฅผ false๋กœ ์„ค์ •ํ•œ ํ›„ if๋ฌธ์„ ์ด์šฉํ•ด ํด๋ฆญํ–ˆ์„ ๋•Œ ๊ฐ’์„ true๋กœ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์˜ต์…˜ ์˜์—ญ์˜ css๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์—์„œ ํ•œ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ธฐ๋ณธ value๋ฅผ false๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ $(this).attr("aria-expanded")๋Š” ๊ณ„์† true๋กœ ๋‚˜์˜ค๊ณ  ์žˆ์—ˆ๋‹ค.

attr ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด aria-expanded์˜ ์†์„ฑ๊ฐ’์„ ๋ฐ˜ํ™˜ํ–ˆ์œผ๋‚˜ attr ๋ฉ”์†Œ๋“œ ์ž์ฒด๊ฐ€ value๋ฅผ ๋ฌธ์žํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— false๊ฐ€ boolean ํ˜•์ด ์•„๋‹Œ ๋ฌธ์ž 'false'๋กœ ๋ฐ˜ํ™˜๋˜์—ˆ๊ณ  ๊ทธ๋ž˜์„œ ๊ณ„์† ์ถœ๋ ฅํ–ˆ์„ ๋•Œ true๋กœ ๋‚˜์˜ค๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ!

๋ฐ˜ํ™˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์ž์—ด true์ธ์ง€ ๊ฒ€์ฆํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋ผ ์ƒ๊ฐํ•ด์„œ

$(this).attr("aria-expanded") === "true" ๋กœ ์กฐ๊ฑด์‹์„ ๋ฐ”๊ฟ” ํ•ด๊ฒฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค ๐Ÿ˜ƒ

 

 

 

 // .toggle_btn(ํ†ต์‹ ์‚ฌ ๋ฒ„ํŠผ) ํด๋ฆญ์‹œ ์‹คํ–‰
 $(".toggle_btn").click(function(e) {
    // ํด๋ฆญํ•œ ํ†ต์‹ ์‚ฌ ๋ฒ„ํŠผ์— on ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์ œ๊ฑฐ, ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ (ํ™”์‚ดํ‘œ ์ œ์–ด์šฉ ์‹๋ณ„์ž)
    $(this).toggleClass("on"); 
            
    // ํ•˜์œ„ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ ๋ฉˆ์ถค
    e.stopPropagation();
            
    // ํด๋ฆญํ•œ ๋ฒ„ํŠผ ์š”์†Œ์˜ aria-expanded ์†์„ฑ ๊ฐ’ ๋น„๊ต
    if ($(this).attr("aria-expanded") === "true") {
       $(this).attr("aria-expanded", "false");
       $(this).siblings('.telecom_area').css({'display':'none'});
    } else {
       $(this).attr("aria-expanded", "true");
       $(this).siblings('.telecom_area').css({'display':'flex'});
    }
})

 

 

ํ† ๊ธ€ ๊ธฐ๋Šฅ๊นŒ์ง€ jQuery๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค

 

 

์—ฌ๊ธฐ์—์„œ ํ•˜์œ„์˜ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ†ต์‹ ์‚ฌ๋ผ๋Š” ํ…์ŠคํŠธ ์š”์†Œ๊ฐ€ ํด๋ฆญํ•œ ๋ฉ”๋‰ด์˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒด๋˜์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•˜์œ„ ๋ฉ”๋‰ด KT๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ•˜์œ„ ๋ฉ”๋‰ด ์˜์—ญ์ด ์‚ฌ๋ผ์ง€๊ณ  ํ†ต์‹ ์‚ฌ๋ผ๊ณ  ์ ํ˜€์ ธ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋‚ด๊ฐ€ ํด๋ฆญํ•œ KT๋กœ ๋‚ด์šฉ์ด ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ๋„ select์™€ option ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋  ๊ธฐ๋Šฅ์ด์—ˆ์œผ๋‚˜...

button ํƒœ๊ทธ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— jQuery๋กœ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค. ๐Ÿ˜‘

 

 

 

 

// ํ•˜์œ„ ์˜ต์…˜ ๋ฉ”๋‰ด ํด๋ฆญ์‹œ ์‹คํ–‰
$(".option_btn").on("click",function(){
  // ๋ณ€์ˆ˜ btn_text๋ฅผ ์„ ์–ธํ•˜๊ณ  ํด๋ฆญํ•œ ๋ฉ”๋‰ด์˜ text ์š”์†Œ๋ฅผ ๋Œ€์ž…
  let btn_text = $(this).text();
          
  // ํ†ต์‹ ์‚ฌ ๋ฉ”๋‰ด์˜ ํ…์ŠคํŠธ ๋‚ด์šฉ์„ ๋ณ€์ˆ˜ btn_text๋กœ ๋Œ€์ฒด
  $('.toggle_btn').text(btn_text);
          
  // ๋ฉ”๋‰ด ๋‚ด์šฉ์ด ๋ฐ”๋€Œ๊ณ  ํ•˜์œ„ ๋ฉ”๋‰ด๋ฅผ ๋‹ค์‹œ close ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
  $(".toggle_btn").attr("aria-expanded", "false");
  $('.toggle_btn').removeClass('on');
  $(".toggle_btn").siblings('.telecom_area').css({'display':'none'});    
})

 

 

 

 

 

์ด๋ ‡๊ฒŒ ํ”„๋ก ํŠธ ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  jsp๋กœ ์ž…๋ ฅ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

input ํƒœ๊ทธ๋‚˜ select ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ ์ผ๋ฐ˜์ ์ธ ์ž‘์—… ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค๋ฉด submit ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์„œ๋ฒ„๋กœ ์ œ์ถœ๋˜์–ดrequest.getParameter ๋ฉ”์†Œ๋“œ์— name ์†์„ฑ ๊ฐ’์„ ์ธ์ˆ˜๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, button ์š”์†Œ๋Š” submit์œผ๋กœ ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ „์†ก๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ hidden ํƒ€์ž…์˜ input ํƒœ๊ทธ๋ฅผ ํ•˜๋‚˜ ๋„ฃ๊ณ 

๋ฒ„ํŠผ ์š”์†Œ๋ฅผ ํด๋ฆญํ• ๋•Œ๋งˆ๋‹ค ํด๋ฆญํ•œ ๋ฒ„ํŠผ ์š”์†Œ์˜ value ๊ฐ’์„ input์˜ value ๊ฐ’์œผ๋กœ ๋Œ€์ž…ํ•ด submitํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

 

 

 <input type="hidden" class="user_telecom_input" name="userTelecom">

 

// ํ†ต์‹ ์‚ฌ button value ๊ฐ’ input ์ฝ”๋“œ
$(".option_btn").on("click",function(){
  // ๋ณ€์ˆ˜ value๋ฅผ ์„ ์–ธํ•˜๊ณ  ํด๋ฆญํ•œ ๋ฒ„ํŠผ์˜ value ๊ฐ’์„ ๋Œ€์ž…
  var value = $(this).val();
  // hidden ํƒ€์ž…์œผ๋กœ ๋„ฃ์€ input ์š”์†Œ์˜ value ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜ value ๋Œ€์ž…
  $(".user_telecom_input").val(value);
})

 

 

 

ํด๋ฆญํ•œ ๋ฉ”๋‰ด์˜ value๊ฐ€ hidden์œผ๋กœ ์ˆจ๊ฒจ๋‘” input์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ 

submit ํ•  ๋•Œ์—๋Š” hidden ํƒ€์ž…์˜ input์˜ value๊ฐ’์ด ์ „์†ก๋  ๊ฒƒ์ด๋‹ค!

java์—์„œ๋Š” hidden input์˜ name ๊ฐ’์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค.

 

 

String userTelecom = request.getParameter("userTelecom"); // ํ†ต์‹ ์‚ฌ

 

 

 

๋ฌด์ˆ˜ํžˆ ๋งŽ์€ google translate ...

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•