Obtener Elemento por Id y establecer el valor en JavaScript

6 minutos de lectura

avatar de usuario de jpo
jpo

Tengo una función de JavaScript a la que le paso un parámetro. El parámetro representa la identificación de un elemento (un campo oculto) en mi página web. Quiero cambiar el valor de este elemento.

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

Cuando hago esto, aparece un error que indica que el valor no se puede establecer porque el objeto es nulo. Pero sé que el objeto no es nulo porque lo veo en el código HTML generado por el navegador.

De todos modos, probé el siguiente código para depurar

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"
}

Cuando aparece el mensaje de alerta, ambos parámetros son iguales, pero sigo recibiendo el error. Pero todo funciona bien cuando lo hago.

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

¿Cómo puedo arreglar esto?

El elemento para el que estoy configurando el valor es un campo oculto y la identificación se establece dinámicamente, a medida que se carga la página. He intentado agregar esto en el $(documento).listo función, pero no funcionó.

  • Veamos dónde llamas a la función (que, a juzgar por el código que has proporcionado, no tiene nombre).

    –Anthony Grist

    1 de febrero de 2013 a las 15:09

  • que es variable ¿Y cómo llamas a la función sin nombre?

    – mplungjan

    1 de febrero de 2013 a las 15:09


  • Cuando haces un diagnostico alert() o console.log() En casos como este, debe siempre envuelva los valores con algunos caracteres de marcador para que pueda saber si hay caracteres de espacio perdidos en las cadenas. Entonces: alert("[" + x + "], [" + y + "]");

    – Puntiagudo

    1 de febrero de 2013 a las 15:12


  • Muestre un ejemplo de que esto suceda en jsfiddle.net: lo que está preguntando realmente no tiene sentido.

    -Dennis

    1 de febrero de 2013 a las 15:17

Avatar de usuario de Xiaodan Mao
Xiaodan Mao

Si miFunc(variable) se ejecuta antes de que el área de texto se represente en la página, obtendrá el error de excepción nula.

<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 -->

Por lo tanto, asegúrese de que su área de texto exista en la página y luego llame miFunc. Puedes usar el ventana.onload o $(documento).listo función.

  • Creo el campo oculto y luego creo el botón que ejecuta la función que establece el valor del campo oculto. Sin embargo, la identificación se establece dinámicamente. Intenté agregar esta función en la función $(document).ready pero surge el mismo problema.

    – jpo

    1 de febrero de 2013 a las 15:37

  • @jpo Si la identificación se establece dinámicamente, también debe asegurarse de que se llame a myFunc después de establecer la identificación. Puede intentar llamar a myFunc en la función que establece la identificación.

    – Xiaodan Mao

    1 de febrero de 2013 a las 15:47


  • Mi código se ve así @Html.HiddenFor(m => m.myfield, new{id = “myId”}) .

    – jpo

    1 de febrero de 2013 a las 15:57

  • La función solo se llama cuando se hace clic en el botón y esto solo sucede después de que se carga la página. ¿De qué otra manera puedo asegurarme de que todo suceda antes de que se haga clic en el botón?

    – jpo

    1 de febrero de 2013 a las 15:58

  • @jpo En onclick=”javascript: myFunc(myID)”, myID debe estar entre comillas simples.

    – Xiaodan Mao

    1 de febrero de 2013 a las 16:05


avatar de usuario de mplungjan
mplungjan

Dado

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

entonces

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");
}

hará lo que quieras


Dado

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

entonces

function setValue(id, newvalue) {
  var s = document.getElementById(id);
  s.value = newvalue;
}

window.onload = function() {
  setValue("This-is-the-real-id", "Hello there");
}

hará lo que quieras

function setContent(id, newvalue) {
  var s = document.getElementById(id);
  if (s.tagName.toUpperCase() === "INPUT") 
    s.value = newvalue;
  else 
    s.innerHTML = newvalue;
}

window.addEventListener("load", function() {
  setContent("This-is-the-real-id-div", "Hello there");
  setContent("This-is-the-real-id-input", "Hello there");
})
<div id="This-is-the-real-id-div"></div>
<input id="This-is-the-real-id-input" type="text" value="">

  • Exactamente lo que pensé. Pero mi identificación y se establece dinámicamente. Pero usé la misma idea. Pero cuando se llama a la función I, el documento no puede encontrar el elemento con la identificación especificada

    – jpo

    1 de febrero de 2013 a las 15:18

  • Necesitamos ver el html y el controlador de eventos (onclick o lo que sea)

    – mplungjan

    1 de febrero de 2013 a las 15:18


Avatar de usuario de Aiyion.Prime
Aiyion.Prime

Ninguna respuesta planteó la posibilidad de utilizar .setAttribute() además de .value():

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

Este apéndice en realidad cambia el contenido del valor en la fuente de las páginas, lo que a su vez hace que el valor se actualice. form.reset()-prueba.

  • ¿Brusco? ¿O simplemente me perdí una regla SO aquí?

    – Aiyion.Prime

    19 de marzo a las 17:19

Avatar de usuario de Dah Moymy
dah moymy

Usar:

<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>

Avatar de usuario de Darlan Dieterich
darlan dieterich

Para cada tipo de elemento, puede usar un atributo específico para establecer el valor.

P.ej:

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

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

¡Puedes probar el ejemplo aquí!

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Pruébalo como a continuación. Funcionará…

<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>

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Creo que el problema es la forma en que llamas a tu función de JavaScript.

Tu código es así:

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

mi identificación debe estar entre comillas.

  • El javascript: la etiqueta es completamente innecesaria

    – mplungjan

    17 de octubre de 2018 a las 5:56

¿Ha sido útil esta solución?