[Resuelto] Problema con Script de javascript y HTML

Iniciado por Victor26, 4 Septiembre 2019, 20:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Victor26

Buenas tardes a todos, tengo una pequeña duda sobre un script que deseo realizar con un formulario en html:

Tengo este formulario realizado en html

<form method="post" name="Formulario">
    <label for="numero">Numero:</label><br>
    <input type="text" name="numero" maxlength="10" placeholder="Digite el numero" id="numero">
    <button onclick="inversor()">Inversor</button>
    <input type="text" name="inversor" maxlength="10" placeholder="Resultado" id="inversor"><br>
   </form>


y deseo que apenas yo digite el numero en el cuadro "Numero" y le unda al boton "Inversor" con un codigo javascript se realize la conversion del inversor y muestre dicho resultado en el cuadro "Resultado".

El codigo javascript que tengo es este.
/* INVERSOR DE UN NUMERO */
function inversor(){
 num1 = document.getElementById('numero').value;
 var resultado = 1/num1;
document.getElementById('inversor').innerHTML = resultado;
}
/* FIN */


Por favor, les pido me puedan colaborar, gracias!

engel lex

document.getElementById('inversor').innerHTML = resultado;

no es un asunto de innerHTML (ya que los inputs no tienen html interno porque no son etiqueta de apertura y cierre)

si recibes valor con .value, daselo con .value

document.getElementById('inversor').value = resultado;


personalmente recomiendo que uses jquery para manejar el DOM, es una de las librerias mas usadas a nivel mundial para js por su valor agregado sin perdida notable de eficiencia

solo por ejemplo como sería

var num1 = $('#numero').val();
var resultado = 1/num1;
$('#inversor').val(resultado);
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

@XSStringManolo


engel lex

#3
hablamos de 10.000 operaciones de modificación en el dom en unos 0.2 segundos...

a menos que realmente necesites hacer esa cantidad, humanamente es imperceptible el resultado y te soy sincero, si haces eso constantemente en tu documento, hay 2 opciones o haces algo muy experimental (donde tienes que realmente estar claro de tus herramientas y optimización) o haces algo muy mal...

los beneficios al tiempo de desarrollo, capacidad de actualizar y dan mantenimiento al mismo, ni por poco se acercan a los defectos devenidos al cliente por el uso de jquery, por lo que lo ha llevado a ser una herramienta muy usada a nivel mundial...

y mantengo mi frase
Citarsu valor agregado sin perdida notable de eficiencia

la perdida de eficiencia casi sin importar lo que hagas, no será notable para el usuario
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Victor26

Esta funcion que estoy haciendo es solamente para pruebas, pues ando aprendiendo de javascript y no quiero hacerlo desde jquery como tal, quiero desde 0. Por eso les pido la colaboracion, lo puse .value pero igual sigue sin darme. Gracias

#!drvy

A parte de lo que te ha dicho el compañero @engel lex, si usas onclick o parecidos, has de asegurarte de que no mezclas ID con nombres de funciones. En este caso estas invocando una función llamada "inversor" y al mismo tiempo tienes un ID "inversor". Por lo tanto el navegador tira un TypeError.

Lo mejor es usar eventos de JS para capturar acciones.

Código (html5) [Seleccionar]
<form method="post" name="Formulario">
    <label for="numero">Numero:</label><br>
    <input type="text" name="numero" maxlength="10" placeholder="Digite el numero" id="numero">

    <button id="btnInvert" type="button">Inversor</button>
    <input type="text" name="inversor" maxlength="10" placeholder="Resultado" id="inversor"><br>
</form>


<script>
    document.getElementById('btnInvert').addEventListener('click', function(e){
        invertir();
    });

    function invertir() {
        var num1 = document.getElementById('numero').value;
        var resultado = 1/num1;
        document.getElementById('inversor').value = resultado;
    }
</script>


Saludos

Victor26

Muchas gracias por el codigo, al comienzo no me funciono porque debia llamar el evento onclick al boton en HTML
<button id="btnInvert" type="button" onclick="invertir()">Inversor</button>
Pero despues de eso me funciono a la perfeccion, muchas gracias!!
Ahora tengo una pregunta revisando la consola de google me parece un error con uno de los eventos al comienzo de JS
index.html:8 Uncaught TypeError: Cannot read property 'addEventListener' of null
    at index.html:8

document.getElementById('btnInvert').addEventListener('click', function(e){
        invertir();
    });

Quisiera saber que podria ser gracias.

#!drvy

Si tienes el evento capturado por javascript (addEventListener) no te hace falta el onclick. Aquí tienes el codigo que te he puesto funcionando, con addEventListener, sin onclick.

https://jsfiddle.net/s7f8Lgdk/


CitarQuisiera saber que podria ser gracias.

Has eliminado el ID del boton Inversor? Estás intentando añadir un evento a algo que no existe.

Saludos

MinusFour

Cita de: Victor26 en  5 Septiembre 2019, 14:45 PM
index.html:8 Uncaught TypeError: Cannot read property 'addEventListener' of null
    at index.html:8


El error lo tienes en la linea 8 de tu HTML, lo que significa que tienes el script en el header. En ese punto, no se ha cargado el DOM, no existe el contenido de tu documento. Si pones el script después del form entonces los elementos ya fueron cargados en el DOM y puedes acceder a ellos.

Otra cosa que puedes hacer es agregar otro listener:

Código (javascript) [Seleccionar]

document.addEventListener('DOMContentLoaded', function(){
  //DOM cargado aquí
});


Y dentro del listener puedes acceder a cualquier elemento del DOM.

No mezcles los handlers y listeners. Si vas a usar los handlers en los atributos/propiedades on<event> no uses listeners. Y viceversa. Yo también evitaría usar los handlers en general.

Victor26

Gracias, me funciono a la perfeccion el codigo pero porque todo estaba junto en el HTML. Como haria para que mi codigo JS funcione en un archivo aparte?, yo lo tenia asi y me daba el error de la consola y ademas no funcionaba el inversor. Gracias

HTML:
<div class="container">
  <div class="row">
    <div class="col-12 col-6">
    <form method="post" name="Formulario">
    <label for="numero">Numero:</label><br>
    <input type="text" name="numero" maxlength="10" placeholder="Digite el numero" id="numero">
    <button id="btnInvert" type="button">Inversor</button>
    <input type="text" name="inversor" maxlength="10" placeholder="Resultado" id="inversor"><br>
</form>
    </div>
  </div>
</div>


JS:


/* INVERSOR EN FORMULARIO */
  document.getElementById('btnInvert').addEventListener('click', function(e){
        invertir();
    });

    function invertir() {
        var num1 = document.getElementById('numero').value;
        var resultado = 1/num1;
        document.getElementById('inversor').value = resultado;
    }
/* FIN */