Javascript ID로 요소 가져 오기 및 값 설정


79

매개 변수를 전달하는 자바 스크립트 함수가 있습니다. 매개 변수는 내 웹 페이지에있는 요소 (숨겨진 필드)의 ID를 나타냅니다. 이 요소의 값을 변경하고 싶습니다.

function myFunc(variable){
  var s= document.getElementById(variable);
  s.value = 'New value'
}

이렇게하면 개체가 null이기 때문에 값을 설정할 수 없다는 오류가 발생합니다. 그러나 브라우저에서 생성 된 html 코드에서 개체가 표시되기 때문에 개체가 null이 아니라는 것을 알고 있습니다. 어쨌든 다음 코드를 디버깅하여 시도했습니다.

function myFunc(variable){
  var x = variable;
  var y  = 'This-is-the-real-id'
  alert(x + ', ' + y)
  var s= document.getElementById(x);
  s.value = 'New value'
}

경고 메시지가 표시되면 두 매개 변수가 동일하지만 여전히 오류가 발생합니다. 하지만 내가 할 때 모든 것이 잘 작동합니다.

  var s= document.getElementById('This-is-the-real-id');
  s.value = 'New value'

이 문제를 어떻게 해결할 수 있습니까?

편집하다

값을 설정하는 요소는 숨겨진 필드이고 ID는 페이지가로드 될 때 동적으로 det입니다. $ (document) .ready 함수에 이것을 추가하려고 시도했지만 작동하지 않았습니다.


2
함수를 어디에서 호출하는지 봅시다 (제공 한 코드로 판단하면 이름이 없습니다).
Anthony Grist

변수는 무엇입니까? 그리고 명명되지 않은 함수를 어떻게 호출합니까?
mplungjan 2013

진단을 수행 alert()하거나 console.log()이와 같은 경우에는 항상 일부 마커 문자로 값을 래핑 해야 문자열에 길잃은 공백 문자가 있는지 여부를 알 수 있습니다. 그래서 :alert("[" + x + "], [" + y + "]");
Pointy

jsfiddle.net에서 이런 일이 발생하는 예를 보여주세요-당신이 묻는 것이 실제로 의미가 없습니다.
Dennis

답변:


73

textarea가 페이지에 렌더링되기 전에 myFunc (variable)이 실행되면 null 예외 오류가 발생합니다.

<html>
    <head>
    <title>index</title>
    <script type="text/javascript">
        function myFunc(variable){
            var s = document.getElementById(variable);
            s.value = "new value";
        }   
        myFunc("id1");
    </script>
    </head>
    <body>
        <textarea id="id1"></textarea>
    </body>
</html>
//Error message: Cannot set property 'value' of null 

따라서 텍스트 영역이 페이지에 있는지 확인한 다음 myFunc를 호출하면 window.onload 또는 $ (document) .ready 함수를 사용할 수 있습니다. 도움이 되었기를 바랍니다.


숨겨진 필드를 만든 다음 숨겨진 필드의 값을 설정하는 기능을 실행하는 버튼을 만듭니다. 그러나 ID는 동적으로 설정됩니다. $ (document) .ready 함수에이 함수를 추가하려고했지만 동일한 문제가 발생합니다.
jpo 2013

@jpo id가 동적으로 설정되면 id가 설정된 후 myFunc가 호출되는지 확인해야합니다. id를 설정하는 함수에서 myFunc를 호출 할 수 있습니다.
Xiaodan Mao

내 코드는 다음과 같습니다. @ Html.HiddenFor (m => m.myfield, new {id = "myId"}) <input type = "button"onclick = "javascript : myFunc (myID)"value = "button"/> .
jpo 2013

이 함수는 버튼을 클릭 할 때만 호출되며 페이지가로드 된 후에 만 ​​발생합니다. 버튼을 클릭하기 전에 모든 일이 발생하도록 어떻게 보장 할 수 있습니까?
jpo 2013

@jpo onclick = "javascript : myFunc (myID)"에서 myID는 작은 따옴표로 묶어야합니다.
Xiaodan Mao

23

주어진

<div id="This-is-the-real-id"></div>

그때

function setText(id,newvalue) {
  var s= document.getElementById(id);
  s.innerHTML = newvalue;
}    
window.onload=function() { // or window.addEventListener("load",function() {
  setText("This-is-the-real-id","Hello there");
}

당신이 원하는 것을 할 것입니다


주어진

<input id="This-is-the-real-id" type="text" value="">

그때

function setValue(id,newvalue) {
  var s= document.getElementById(id);
  s.value = newvalue;
}    
window.onload=function() {
  setValue("This-is-the-real-id","Hello there");
}

당신이 원하는 것을 할 것입니다


정확히 내가 생각한 것. 하지만 내 아이디와 동적으로 설정합니다. 그러나 나는 같은 생각을 사용했습니다. 하지만 내가 함수가 호출되면 문서는 지정된 ID를 가진 요소를 찾을 수 없습니다
jpo

html과 이벤트 핸들러 (onclick 등)가 필요합니다
mplungjan 2013

4
<html>
<head>
<script>
function updateTextarea(element)
{
document.getElementById(element).innerText = document.getElementById("ment").value;
}
</script>
</head>
<body>

<input type="text" value="Enter your text here." id = "ment" style = " border: 1px solid grey; margin-bottom: 4px;"  

onKeyUp="updateTextarea('myDiv')" />

<br>

<textarea id="myDiv" ></textarea>

</body>
</html>

2

각 요소 유형에 대해 특정 속성을 사용하여 값을 설정할 수 있습니다. 예 :

<div id="theValue1"></div>
window.document.getElementById("theValue1").innerText = "value div";

<input id="theValue2"></input>
window.document.getElementById("theValue2").value = "value input";

여기에서 예제를 시도 할 수 있습니다!


1

아래처럼 시도해보십시오.

<html>
<head>
<script>
function displayResult(element)
{
document.getElementById(element).value = 'hi';
}
</script>
</head>
<body>

<textarea id="myTextarea" cols="20">
BYE
</textarea>
<br>

<button type="button" onclick="displayResult('myTextarea')">Change</button>

</body>
</html>

1
인라인 이벤트 핸들러는 나쁜 습관입니다.
jbabey

0

문제는 자바 스크립트 함수를 호출하는 방식이라고 생각합니다. 귀하의 코드는 다음과 같습니다.

<input type="button" onclick="javascript: myFunc(myID)" value="button"/>

myID는 따옴표로 묶어야합니다.


2
javascript:레이블은 완전히 불필요
mplungjan

0

이 질문에 대한 대답은 .setAttribute()추가로 사용할 가능성을 제기하지 않았습니다..value()

document.getElementById('some-input').value="1337";
document.getElementById('some-input').setAttribute("value", "1337");

원래 질문자에게는 도움이되지 않을 것 같지만이 부록은 실제로 페이지 소스의 값 내용을 변경하여 값 업데이트를 form.reset()증명합니다.

다른 사람들에게 도움이되기를 바랍니다.

(또는 js quirks를 잊은 반년 만에 ...)

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