jQuery / Reference / .val()

.val()은 input, select, textarea의 현재 값을 읽거나 설정합니다. 인수 없이 호출하면 첫 요소의 값만 읽고, 값을 전달하면 선택한 모든 입력 요소에 적용합니다.

문법과 적용 범위

const name = $("#name").val();
$("#name").val("홍길동");
$("#topics").val(["html", "css"]);

일반 입력칸은 문자열을 반환하고, multiple이 있는 select는 선택한 option 값들의 배열을 반환합니다. jQuery 3.0 이상에서는 선택이 없는 다중 select의 결과가 빈 배열입니다. 빈 jQuery 집합에서 읽으면 undefined가 나옵니다. 체크박스의 .val()은 체크 여부가 아니라 value이므로, 체크 여부는 .prop("checked")로 확인하거나 :checked로 범위를 정합니다.

jQuery 공식 문서의 .val() 정의와 인수에서 다른 호출 형태도 확인할 수 있습니다.

전체 실행 예제

아래 코드를 UTF-8 형식의 example.html 파일로 저장한 뒤 브라우저로 여세요. 예제는 jQuery 4.0.0 일반 빌드를 외부 주소에서 불러오므로 인터넷 연결이 필요합니다. 문서가 준비된 뒤 실행하도록 $(function () { ... }) 안에 코드를 작성했습니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery val 예제</title>
  <style>
    body { margin: 24px; font-family: sans-serif; line-height: 1.6; }
    .marked { background: #fff0b3; border: 2px solid #835b00; }
    .active { color: #a00000; font-weight: bold; }
    button, input, select { font: inherit; }
    #output { white-space: pre-wrap; overflow-wrap: anywhere; }
  </style>
  <script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
</head>
<body>
<label for="name">이름</label><input id="name" value="초기 이름">
<label for="topics">관심 주제</label>
<select id="topics" multiple>
  <option value="html">HTML</option>
  <option value="css">CSS</option>
  <option value="jquery">jQuery</option>
</select>
<button id="fill" type="button">값 설정</button>
  <p id="output" aria-live="polite"></p>
  <script>
    $(function () {
      $("#name, #topics").on("change", function () {
        $("#output").text("이름: " + $("#name").val() + " / 주제: " + JSON.stringify($("#topics").val()));
      });
      $("#fill").on("click", function () {
        $("#name").val("홍길동");
        $("#topics").val(["html", "css"]).trigger("change");
      });
    });
  </script>
</body>
</html>

실행 결과 확인

값 설정을 누르면 이름은 홍길동, 선택 항목은 HTML과 CSS로 바뀝니다. 결과에는 이름: 홍길동 / 주제: ["html","css"]가 표시됩니다. .trigger("change")가 결과 표시 핸들러를 실행합니다.

공백을 제거해 다시 설정하기

$("#name").val(function (index, value) {
  return value.trim();
});

함수 형태는 각 요소의 인덱스와 현재 값을 받아 새 값을 반환합니다. 사용자의 입력을 바꾸는 작업이므로, 공백이 의미 있는 비밀번호 같은 항목에 일괄 적용하지 마세요.

사용할 때 주의할 점

  • .val(값)만 호출하면 change 이벤트가 자동 발생하지 않습니다. 후속 처리가 이벤트에 연결돼 있으면 필요한 요소에서 .trigger("change")를 호출하세요.
  • 여러 체크박스의 값을 모으려면 :checked로 고른 후 .map(function () { return this.value; }).get()을 사용합니다. 여러 요소를 선택해 .val()만 호출하면 첫 요소의 값만 얻습니다.
  • 텍스트 입력칸의 숫자도 문자열일 수 있으므로 계산 전에 Number() 등으로 변환하고 빈 값·유효하지 않은 입력을 검사하세요.
  • placeholder는 값이 아니며, .val("")는 입력값을 비우는 동작입니다. 기본 HTML value 속성과 사용자가 바꾼 현재 값은 다를 수 있습니다.

용도를 비교하려면 .attr()와 현재 값의 차이을 참고하세요.