parseInt($(this).next(".selectBox").css("border-width"), 10)
NaN인지를 결과한다.
JsFiddle : http://jsfiddle.net/nvv35/8/
다음과 같이 귀하의 코드를 변경
:
** 업데이트 : 국경의 ** 테두리 폭을 얻으려면 제대로 특정 측면 지정된 월 될 필요가있다. (확인 : How to get border width in jQuery/javascript를)
$(document).ready(function() {
$("select").css("display", "none");
$(".selectContainer").css("display", "inline-block");
$(".selectHead").each(function() {
var newWidth = $(this).next(".selectBox").outerWidth();
var borderWidth = parseInt($(this).next(".selectBox").css("border-left-width").replace(/[^0-9]/g,""), 10) ;
if(isNaN(borderWidth)) borderWidth = 0;
newWidth = newWidth - (borderWidth * 2);
$(this).css("width", newWidth + "px");
});
$(".selectHead").on("click", function() {
$(this).next(".selectBox").show();
$(this).closest(".selectContainer").on("mouseleave", function() {
$(this).find(".selectBox").hide();
});
});
$("li", ".optionsBox").on("click", function() {
var newValue = $(this).attr("id").replace(/(.*)-/,"");
$(this).closest(".selectContainer").next("select").val(newValue);
$(this).closest(".selectBox").prev(".selectHead").html($(this).html());
$(this).closest(".selectBox").find(".optionSelected").removeClass("optionSelected");
$(this).addClass("optionSelected");
$(this).closest(".selectBox").hide();
});
});
아, 그래, 당신 말이 맞아입니다. 문제는 경계 빼기 (border subtraction) 인 것 같습니다. 지금 당장은 모든 브라우저에서 NaN이 나오고 상자에 값이 너무 커지면 자동으로 0 값이 코드에 기록됩니다. 코드에 수동으로 2를 추가하고 수정할 수는 있지만 경계 너비를 가져 와서 해당 브라우저에서 계속 작동하려면 어떻게해야합니까? – Tom
업데이트 된 게시물 확인 – Chandu
감사합니다. 방금 전에 똑같은 페이지를 찾았습니다. 해결할 수있었습니다 :) 다시 답변 해 주셔서 감사합니다! +1 및 수락 됨 – Tom