jQuery .val 변경은 입력 값을 변경하지 않습니다.


103

값에 링크가있는 HTML 입력이 있습니다.

<input type = 'text' value = 'http://www.link.com' id = 'link' />

특정 이벤트의 값을 변경하기 위해 jQuery를 사용하고 있습니다.

$('#link').val('new value');

위의 코드는 텍스트 상자의 값을 변경하지만 코드의 값은 변경하지 않습니다 (값 = 'http://www.link.com'은 변경되지 않음). 값을 변경하려면 =``도 필요합니다.


무슨 뜻 in the code입니까? 페이지의 원본 (수정되지 않은) 소스를보고 있습니까?
Frédéric Hamidi

Chrome의 inspect 요소 사용.
Lukas

3
@Luke 값은 변경되지만 Chrome 검사기에서 HTML 요소의 표시 값은 변경되지 않습니다. 그런 다음 값을 경고하거나 콘솔에 출력하면 변경된 것을 볼 수 있습니다. 보세요
TheZ

예, 지금 알겠습니다. zClip을 사용하여 값을 클립 보드에 복사하지만 변경된 후 이전 값을 복사하고 있습니다. 약간 엉망으로 고칠 수 있다고 생각합니다.
Lukas

답변:


177

attr대신 사용하십시오 .
$('#link').attr('value', 'new value');

데모


6
이것은 완전히 정확합니다. setAttribute또는 jQuery 를 사용 attr하면 DOM 요소의 값에도 영향을 미칩니다. jsfiddle.net/a8SxF/1
TheZ

4
@TheZ 입력의 더티 값 플래그가 거짓이기 때문입니다. 입력 (사용자 입력 후 값이 더티)과 상호 작용 한 다음 setAttribute
Esailija 2012-08-08

5
그러나를 사용하여 html을 얻으려면 또는 ... .html()를 사용하면 문제가되지 않는 동일한 예전 값이 있습니다 . :(.val('new value')attr('value', 'new value')
Legionar

6
.val (이전에 읽은 모든 내용에서 제안한대로)을 사용하여 방대하고 복잡한 함수를 코딩했으며 정확히 동일한 문제가 발생했습니다. 피 묻은 성가신! 이 답변은 양식 요소를 동적으로 업데이트하려는 jQuery 초보자를위한 첫 번째 호출 지점이어야합니다. 이 글을 먼저 읽었다면 몇 시간을 절약 할 수 있었을 것입니다!
Grant

2
이것이 JavaScript / JQuery로 실행하는 것이 매우 어려운 이유입니다. 이와 같은 많은주의 사항이 있습니다. 이것은 나를 많이 도왔습니다. 감사합니다!
eaglei22

13

값 속성을 변경해도 defaultValue. 코드 ( .html()또는로 검색 됨 innerHTML)에서 value 속성은 value 속성이 아니라을 포함합니다 defaultValue.


1
그것은 그것을 설명합니다. 입력해도 <input id = 'a'value>는 변경되지 않지만 $ ( "# a"). val ()의 결과에는 영향을줍니다. 확실히해야 할 질문 : $ ( "# a"). val (value)가 입력 요소의 값을 변경하여 올바른 값이 제출되도록하는 올바른 방법입니까?
다니엘 카츠

1
네, 맞습니다. 속성을 변경해도 제출되는 내용은 변경되지 않습니다.
Kevin B


2

이것은 나에게 일어난 가능한 시나리오입니다. 글쎄요, 누군가에게 도움이된다면 : 코드 어딘가에 모든 텍스트 상자 값을 표시하기 전에 지우는 함수를 사용하는 복잡한 앱을 작성했습니다. 언젠가 jquery val ( 'value')를 사용하여 텍스트 상자 값을 설정하려고했지만 그 직후에 ClearAllInputs 메서드를 호출했음을 알아 차리지 못했습니다. 그래서 이런 일이 발생할 수도 있습니다.


0

내 비슷한 문제는 선택기에 특수 문자 (예 : 마침표)가있어서 발생했습니다.

수정 사항은 특수 문자를 이스케이프하는 것입니다.

$("#dots\\.er\\.bad").val("mmmk");

매우 안타깝습니다. 탈출해서는 안됩니다. 요소의 ID 이름을 바꿔야합니다.
webaholik

-1
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
function changes() {
$('#link').val('new value');
}
</script>
<button onclick="changes()">a</button>
<input type='text' value='http://www.link.com' id='link'>

1
그래도 실제 값은 업데이트되지 않습니다. 화면 텍스트 상자를 업데이트하지만 양식을 제출하려고 할 때 값은 페이지가 처음로드되었을 때의 값입니다.
Grant

-1

나에게 문제는이 필드의 값을 변경하지 못했다는 것입니다.

$('#cardNumber').val(maskNumber);

위의 솔루션 중 어느 것도 나를 위해 일하지 않았으므로 추가 조사를 통해 다음을 발견했습니다.

DOM 레벨 2 이벤트 사양에 따르면 : 변경 이벤트는 컨트롤이 입력 포커스를 잃고 포커스를 얻은 이후 값이 수정되었을 때 발생합니다. 즉, 변경 이벤트는 사용자 상호 작용에 의해 변경 될 때 발생하도록 설계되었습니다. 프로그래밍 방식 변경으로 인해이 이벤트가 발생하지 않습니다.

해결책은 트리거 함수를 추가하고 다음과 같이 변경 이벤트를 트리거하도록하는 것입니다.

$('#cardNumber').val(maskNumber).trigger('change');

-2

고유하지 않은 ID를 가진 둘 이상의 요소를 다시 확인하십시오! 그것은 foreach 루프와 내 ID의 복제가있는 내 상황이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.