๊ด€๋ฆฌ ๋ฉ”๋‰ด

bom's happy life

[spring boot, jsp, js] ๋กœ๊ทธ์ธ์œ ์ €์˜ ์ฐจ๋Ÿ‰์ข…๋ฅ˜์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋ณธ๋ฌธ

Deveolpment Study๐Ÿ—‚๏ธ

[spring boot, jsp, js] ๋กœ๊ทธ์ธ์œ ์ €์˜ ์ฐจ๋Ÿ‰์ข…๋ฅ˜์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ

bompeach 2024. 2. 2. 16:57

Controller

//๋กœ๊ทธ์ธ์œ ์ €์˜ ์ฐจ์ข…๋ฅ˜(ex.์ค€์ค‘ํ˜•์ฐจ)
CarVo userCar = carService.findCarByUserSeq(authUser.getSeq());
if (userCar != null && userCar.getCarKind() != null) {
    String userCarKind = userCar.getCarKind();
    model.addAttribute("userCarKind", userCarKind);
} else {
    model.addAttribute("userCarKind", "null");
}

//์ด๋ฒˆ ๋‹ฌ ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€
List<StdGasPriceVo> list = stdGasPriceService.stdGasPriceByThisMonth(stdGasPriceVo);
model.addAttribute("list" , list);

 

์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋กœ๊ทธ์ธ์œ ์ €์˜ ์ž๋™์ฐจ ์ข…๋ฅ˜๋ฅผ ๊ตฌํ•˜๊ณ , 

์ด๋ฒˆ๋‹ฌ ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ•œ๋‹ค.

 

 

JSP

<span id="userCarKind" style="display:none;">${userCarKind }</span>

---์ค‘๋žต

<tbody>
    <tr>
        <td onchange="optionControl()" style="text-align:center;"> <!-- ๊ตฌ๋ถ„ -->
            <select id="carKind" name="flag">
                <option value="" >:: ์„ ํƒ ::</option>
                <option value="๋ณต๋ฆฌํ›„์ƒ๋น„">๋ณต๋ฆฌํ›„์ƒ๋น„</option>
                <option value="์ฐจ๋Ÿ‰์œ ์ง€๋น„">์ฐจ๋Ÿ‰์œ ์ง€๋น„</option>
                <option value="์—ฌ๋น„๊ตํ†ต๋น„">์—ฌ๋น„๊ตํ†ต๋น„</option>
                <option value="๊ธฐํƒ€">๊ธฐํƒ€</option>
            </select>
        </td>
        <td> <!-- ์‹ ์ฒญ๊ธˆ์•ก -->
            <input id="Application_amount" name="amount" type="text" value="" placeholder="0">
        </td>
        <td> <!-- ์ฃผํ–‰๊ฑฐ๋ฆฌ -->
            <input id="distance_driven" name="mileage" type="text" value="" placeholder="0">
        </td>
    </tr>
</tbody>

---์ค‘๋žต

<!-- ํ˜„์žฌ ์›”์— ํ•ด๋‹นํ•˜๋Š” ์ฐจ๋Ÿ‰์ข…๋ฅ˜๋ณ„ ํ‘œ์ค€๋‹จ๊ฐ€(๊ณ„์‚ฐ์šฉ ๋ฐ์ดํ„ฐ) --> 
<div id="carTypePrices" style="display:none">
    <c:forEach var="list" items="${list}" varStatus="status">
        <div class="price light">${list.light}</div>
        <div class="price compact">${list.compact}</div>
        <div class="price subMidSize">${list.subMidSize}</div>
        <div class="price midSize">${list.midSize}</div>
        <div class="price semiLarge">${list.semiLarge}</div>
        <div class="price large">${list.large}</div>
        <div class="price electric">${list.electric}</div>
    </c:forEach>
</div>

 

 

JS

//์ฐจ๋Ÿ‰ ์ข…๋ฅ˜๋ณ„ ๋‹จ๊ฐ€ ์ •๋ณด
var carTypePrices = {};
document.querySelectorAll('#carTypePrices .price').forEach(function(element) {
    var carType = element.classList[1]; // ๋‘ ๋ฒˆ์งธ ํด๋ž˜์Šค ์ด๋ฆ„์ด ์ฐจ๋Ÿ‰ ์ข…๋ฅ˜
    var price = Number(element.textContent);
    carTypePrices[carType] = price;
});

console.log(carTypePrices);

var carKindMapping = {
    '๊ฒฝ์ฐจ': 'light',
    '์†Œํ˜•์ฐจ': 'compact',
    '์ค€์ค‘ํ˜•์ฐจ': 'subMidSize',
    '์ค‘ํ˜•์ฐจ': 'midSize',
    '์ค€๋Œ€ํ˜•์ฐจ': 'semiLarge',
    '๋Œ€ํ˜•์ฐจ': 'large',
    '์ „๊ธฐ์ฐจ': 'electric'
};

//๊ตฌ๋ถ„์˜ต์…˜์ œ์–ด
function optionControl() {
	var selectedOption = document.getElementById('carKind').value;
	var distanceInput = document.getElementById('distance_driven');
	var AppamountInput = document.getElementById('Application_amount');
	
	distanceInput.disabled = false;
	AppamountInput.disabled = false;
	    
    switch(selectedOption) {
    case '๋ณต๋ฆฌํ›„์ƒ๋น„':
    case '์—ฌ๋น„๊ตํ†ต๋น„':
    case '๊ธฐํƒ€':
        distanceInput.disabled = true;
        break;
    case '์ฐจ๋Ÿ‰์œ ์ง€๋น„':
        AppamountInput.disabled = true;
        distanceInput.addEventListener('input', calculateApplicationAmount); // ์ฃผํ–‰๊ฑฐ๋ฆฌ ์ž…๋ ฅ ์‹œ ๊ณ„์‚ฐ
        break;
    }
	
}

function calculateApplicationAmount() {
	var userCarKindKorean = document.getElementById('userCarKind').textContent.trim(); 
	var userCarKind = carKindMapping[userCarKindKorean]; // ํ•œ๊ธ€ ์ฐจ๋Ÿ‰ ์ข…๋ฅ˜๋ช…์„ ์˜๋ฌธ ํ‚ค๋กœ ๋งคํ•‘
    var distance = document.getElementById('distance_driven').value; // ์ฃผํ–‰๊ฑฐ๋ฆฌ ์ž…๋ ฅ ๊ฐ’
    var pricePerUnit = carTypePrices[userCarKind]; // ์‚ฌ์šฉ์ž ์ฐจ๋Ÿ‰์˜ ๋‹จ๊ฐ€
    
    // ์ฃผํ–‰๊ฑฐ๋ฆฌ ์ž…๋ ฅ ๊ฐ’์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์‹ ์ฒญ ๊ธˆ์•ก ํ•„๋“œ๋ฅผ ๋น„์›Œ์ฃผ๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ
    if (!distance || isNaN(distance)) {
        document.getElementById('Application_amount').value = '';
        return; // ํ•จ์ˆ˜ ์ข…๋ฃŒ
    }
    
    if (distance && pricePerUnit) { // ์ฃผํ–‰๊ฑฐ๋ฆฌ๊ฐ€ ์œ ํšจํ•˜๊ณ , ๋‹จ๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
        var applicationAmount = distance * pricePerUnit; // ๊ฑฐ๋ฆฌ * ํ•ด๋‹น์›”,์ฐจ์ข…๋ณ„ ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€
        document.getElementById('Application_amount').value = applicationAmount; 
    }
}

์ฝ˜์†”๋กœ ์ฐ์–ด๋ณธ ์ฐจ์ข…๋ณ„,ํ•ด๋‹น์›” ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€

 

 

 

โœ… ์ตœ์ข… ๊ฒฐ๊ณผ : ์ฐจ๋Ÿ‰์œ ์ง€๋น„๋ฅผ ์„ ํƒํ•˜๋ฉด ์‹ ์ฒญ๊ธˆ์•ก input์ด disabled์ฒ˜๋ฆฌ๋˜๊ณ , ์ฃผํ–‰๊ฑฐ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ฃผ์œ ํ‘œ์ค€๋‹จ๊ฐ€๋กœ ๊ณ„์‚ฐ๋˜์–ด ์‹ ์ฒญ๊ธˆ์•ก์— ์ฐํžˆ๋„๋ก ์™„์„ฑํ•˜์˜€๋‹ค.