Estoy tratando de hacer que js detecte qué hay en un cuadro de entrada, y si el usuario escribió un código, algo sucederá hasta ahora.

function input() {
    document.getElementById('hehe').value
    if (value == "hello") {
        window.alert("SOMETHING");
    } else {
        window.alert("SOMETHING");
    }
}
<input id="hehe" type="text" oninput="input()">

Pero no funciona por alguna razón y no puedo ver por qué

0
FSuperSteve 28 oct. 2017 a las 03:41

3 respuestas

La mejor respuesta

Debe guardar el valor antes de poder usarlo. document.getElementById('hehe').value DEVUELVE el valor del campo de texto de entrada, pero en la siguiente línea está utilizando la variable no existente value.

Solo cámbielo a:

function input() {
    var value = document.getElementById('hehe').value
    if (value == "hello") {
        window.alert("SOMETHING");
    } else {
        window.alert("SOMETHING");
    }
}

O úsalo directamente:

function input() {
    if (document.getElementById('hehe').value == "hello") {
        window.alert("SOMETHING");
    } else {
        window.alert("SOMETHING");
    }
}
1
Joshua K 28 oct. 2017 a las 00:49

Use onkeypress en lugar de oninput.

http://jsfiddle.net/VDd6C/8/

0
Andrew Myers 2 nov. 2017 a las 22:26

No está asignando el valor del elemento DOM a una variable. Deberías escribir:

var value = document.getElementById('hehe').value;

O, usando jQuery:

var value = $('#hehe').val();

Sin embargo, otra forma automatizada de detectar el texto ingresado, usando la biblioteca KnockoutJS, es data-bind. Sincroniza automáticamente el elemento DOM con su Model después de aplicar el enlace a su ModelView.

Aquí hay un ejemplo: (jsfiddle)

Html:

<p>Name: <input data-bind="textInput: name"></p>
<h1>The typed name is: <span data-bind="text: name"></span>.</h1>

Javascript:

ko.applyBindings({
    name: ko.observable("SOMETHING")
});
0
Sami Almalki 28 oct. 2017 a las 03:05