Подтвердить что ты не робот

Как получить значение входного текста в JavaScript

Как получить значение входного текста в JavaScript?

<script language="javascript" type="text/javascript">
    lol = document.getElementById('lolz').value;
    function kk(){
    alert(lol);
    }
</script>

<body>
    <input type="text" name="enter" class="enter" value="" id="lolz"/>
    <input type="button" value="click" OnClick="kk()"/>
</body>

Когда я помещал lol = document.getElementById('lolz').value; вне функции kk(), как показано выше, он не работает, но когда я его вставляю, он работает. Может ли кто-нибудь сказать мне, почему?

4b9b3361

Ответ 1

Причина, по которой вы работаете, не работает, когда lol определяется вне нее, потому что DOM еще не загружен когда JavaScript запускается впервые. Из-за этого getElementById вернет null (см. MDN).

Вы уже нашли наиболее очевидное решение: вызывая getElementById внутри функции, DOM будет загружен и готов к моменту вызова функции, и элемент будет найден, как вы ожидаете.

Есть еще несколько решений. Один - подождать, пока весь документ будет загружен, например:

<script type="text/javascript">
    var lolz;
    function onload() { 
        lolz = document.getElementById('lolz');
    }
    function kk(){
        alert(lolz.value);
    }
</script>

<body onload="onload();">
    <input type="text" name="enter" class="enter" value="" id="lolz"/>
    <input type="button" value="click" onclick="kk();"/>
</body>

Обратите внимание на атрибут onload тега <body>. (С другой стороны: атрибут language тега <script> устарел. Не используйте его.)

Однако существует проблема с onload: он ожидает, пока не будет загружено все (включая изображения и т.д.).

Другой вариант - подождать, пока DOM будет готов (что обычно намного раньше onload). Это можно сделать с помощью "простого" JavaScript, но гораздо проще использовать библиотеку DOM, например jQuery.

Например:

<script type="text/javascript">
    $(document).ready(function() {
        var lolz = $('#lolz');
        var kk = $('#kk');
        kk.click(function() {
            alert(lolz.val());
        });
    });
</script>

<body>
    <input type="text" name="enter" class="enter" value="" id="lolz"/>
    <input type="button" value="click" id="kk" />
</body>

jQuery . ready() использует функцию в качестве аргумента. Функция будет запущена, как только DOM будет готов. Этот второй пример также использует . Click() для привязки kk onclick обработчика вместо того, чтобы делать это inline в HTML.

Ответ 2

Не используйте глобальные переменные таким образом. Даже если это может сработать, это плохой стиль программирования. Таким образом вы можете непреднамеренно переписать важные данные. Сделайте это вместо:

<script type="text/javascript">
   function kk(){
       var lol = document.getElementById('lolz').value;
       alert(lol);
   }
</script>

Если вы настаиваете, чтобы var lol устанавливался вне функции kk, я предлагаю это решение:

<body>
    <input type="text" name="enter" class="enter" value="" id="lolz"/>
    <input type="button" value="click" OnClick="kk()"/>
    <script type="text/javascript">
       var lol = document.getElementById('lolz');
       function kk() {
           alert(lol.value);
       }
    </script>
</body>

Обратите внимание, что элемент script должен следовать за элементом input, к которому он относится, поскольку элементы запрашиваются только с помощью getElementById, если они уже были проанализированы и созданы.

Оба примера работают, протестированы в jsfiddler.

Изменить. Я удалил атрибут language="javascript", потому что он устарел. См. Спецификация W3 HTML4, элемент SCRIPT:

language= cdata [ДИ]

Deprecated. Этот атрибут указывает язык сценариев содержимого этого элемента. Его значение является идентификатором для языка, но поскольку эти идентификаторы не являются стандартными, этот атрибут был Deprecated в пользу типа.

и

Устаревший элемент или атрибут - это тот, который устарел новыми конструкциями. [...] Устаревшие элементы могут устареть в будущих версиях HTML. [...] Эта спецификация включает примеры, иллюстрирующие, как избежать использования устаревших элементов. [...]

Ответ 3

Изменить:

  • Переместите ваш javascript на конец страницы, чтобы убедиться, что DOM (элементы html) загружены до их доступа (javascript для завершения быстрой загрузки).
  • Объявляйте свои переменные всегда как в примере, используя var textInputVal = document.getElementById('textInputId'). value;
  • Используйте описательные имена для входов и элементов (упрощает понимание вашего собственного кода и когда кто-то ищет его).
  • Чтобы узнать больше о getElementById, см. http://www.tizag.com/javascriptT/javascript-getelementbyid.php
  • Использование библиотеки, такой как jQuery, упрощает использование javascript в сотни раз, чтобы узнать больше: http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery

Ответ 4

Обратите внимание, что эта строка:

lol = document.getElementById('lolz').value;

находится перед фактическим элементом <input> в вашей разметке:

<input type="text" name="enter" class="enter" value="" id="lolz"/>

Ваш код анализируется по строкам, а строка lol = ... оценивается до того, как браузер узнает о существовании ввода с id lolz. Таким образом, document.getElementById('lolz') вернет null, а document.getElementById('lolz').value должно вызывать ошибку.

Переместите эту строку внутри функции, и она должна работать. Таким образом, эта строка будет работать только при вызове функции. И используйте var, как предложили другие, чтобы не сделать глобальную переменную:

function kk(){
    var lol = document.getElementById('lolz').value;
    alert(lol);
}

Вы также можете переместить script в конец страницы. Перемещение всех блоков script в конец вашего HTML <body> является стандартной практикой сегодня, чтобы избежать такой проблемы с референцией. Это также ускоряет загрузку страницы, так как скрипты, которые занимают много времени для загрузки и анализа, обрабатываются после отображения (в основном) HTML.

Ответ 5

<script type="text/javascript">
function kk(){
    var lol = document.getElementById('lolz').value;
    alert(lol);
}


</script>

<body onload="onload();">
    <input type="text" name="enter" class="enter" id="lolz" value=""/>
    <input type="button" value="click" onclick="kk();"/>
</body>

используйте этот

Ответ 6

так как теперь ваша локальная переменная локальна, рекомендуется использовать ключевое слово var для объявления любых переменных.

это может сработать для вас:

function kk(){
  var lol = document.getElementById('lolz').value;
  alert(lol);
}

Ответ 7

Все приведенные выше решения полезны. И они использовали строку lol = document.getElementById('lolz').value; внутри функции function kk().

Что я предлагаю, вы можете вызвать эту переменную из другой функции fun_inside()

function fun_inside()
{    
lol = document.getElementById('lolz').value;
}
function kk(){
fun_inside();
alert(lol);
}

Это может быть полезно при создании сложных проектов.

Ответ 8

<script>
function subadd(){
subadd= parseFloat(document.forms[0][0].value) + parseFloat(document.forms[0][1].value) 
window.alert(subadd)  
}
</script>

<body>
<form>
<input type="text" >+
<input type="text" >
<input type="button" value="add" onclick="subadd()">
</form>
</body>

Ответ 9

<input type="password"id="har">
<input type="submit"value="get password"onclick="har()">
<script>
    function har() {
        var txt_val;
        txt_val = document.getElementById("har").value;
        alert(txt_val);
    }
</script>

Ответ 10

document.getElementById( 'ID'). Значение

Ответ 11

Причина, по которой это не работает, состоит в том, что переменная не изменяется с помощью текстового поля. Когда он изначально запускает код, он получает значение текстового поля, но потом его больше не вызывают. Однако, когда вы определяете переменную в функции, каждый раз, когда вы вызываете функцию, которую обновляет переменная. Затем он предупреждает переменную, которая теперь равна вводу текстового поля.

Ответ 12

Как получить значение входного текста в JavaScript

    var textbox;
    function onload() { 
        //Get value.
        textbox = document.getElementById('textbox');
    }

    function showMessage() { 
        //Show message in alert()
        alert("The message is: " + textbox.value);
    }
<body onload="onload();">
<div>
<input type="text" name="enter" class="enter" placeholder="Write something here!" value="It´s a wonderful day!" id="textbox"/>
<input type="button" value="Show this message!" onClick="showMessage()" />
</div>