Как получить входное текстовое значение в 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(), как показано выше, это не работает, но когда я положил его внутрь, он работает. Может кто-нибудь сказать мне, почему?
12 ответов:
причина, по которой вы не работаете, когда
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>Примечание на
<body>тег. (на стороне Примечание: на<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 .готов() принимает функцию в качестве аргумента. Функция будет запущена, как только DOM будет готов. Второй пример также использует .нажмите () привязать КК
onclickобработчик, вместо того, чтобы делать то, что внутри ФОРМАТ HTML.
Не используйте глобальные переменные таким образом. Даже если это может сработать, это плохой стиль программирования. Таким образом можно непреднамеренно перезаписать важные данные. Сделайте это вместо:
<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.
Edit: я убрал , потому что он устарел. Смотрите спецификация W3 HTML4, элемент скрипта:
устаревший. Этот атрибут определяет язык сценариев содержимого этого элемента. Его значение идентификатор языке, но, поскольку эти идентификаторы не являются стандартными, этот атрибут устаревший в пользу типа.
и
устаревший элемент или атрибут-это устаревшие на более новые конструкции. [ ... ] Устаревшие элементы могут устареть в будущих версиях HTML. [ ... ] Эта спецификация включает примеры, иллюстрирующие, как избежать использования устаревших элементов. [...]
обратите внимание, что эта строка:
lol = document.getElementById('lolz').value;перед фактическим
<input>элемент на разметку:<input type="text" name="enter" class="enter" value="" id="lolz"/>ваш код анализируется строка за строкой, и
lol = ...строка вычисляется до того, как браузер узнает о существовании ввода с идентификаторомlolz. Таким образом,document.getElementById('lolz')вернутсяnullиdocument.getElementById('lolz').valueдолжно вызвать ошибку.переместите эту строку внутри функции, и она должна работать. Таким образом, эта линия будет работать только тогда, когда вызывается функция. И использовать
varкак предлагали другие, чтобы избежать превращения его в глобальную переменную:function kk(){ var lol = document.getElementById('lolz').value; alert(lol); }вы также можете переместить скрипт в конце страницы. Перемещение всех блоков скрипта в конец вашего HTML
<body>сегодня стандартная практика, чтобы избежать такого рода ошибок. Он также имеет тенденцию ускорять загрузку страницы, поскольку сценарии, которые занимают много времени для загрузки и анализа, обрабатываются после отображения HTML (в основном).
Edit:
- переместите javascript в конец страницы, чтобы убедиться, что DOM (html-элементы) загружен перед доступом к ним (javascript для завершения быстрой загрузки).
- объявляйте свои переменные всегда, как в примере, используя var textInputVal = документ.getElementById ('textInputId').значение;
- используйте описательные имена для входов и элементов (облегчает понимание вашего собственного кода и когда кто-то другой ищет он.)
- чтобы узнать больше о getElementById, см.:http://www.tizag.com/javascriptT/javascript-getelementbyid.php
- использование библиотеки, такой как jQuery делает использование javascript в сто раз проще, чтобы узнать больше:http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery
<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>использовать
поскольку ваш lol теперь является локальной переменной, рекомендуется использовать ключевое слово var для объявления любых переменных.
это может работать для вас :
function kk(){ var lol = document.getElementById('lolz').value; alert(lol); }
все вышеперечисленные решения полезны. И они использовали линию
lol = document.getElementById('lolz').value;внутри функцииfunction kk().Я предлагаю, вы можете вызвать эту переменную из другой функции
fun_inside()function fun_inside() { lol = document.getElementById('lolz').value; } function kk(){ fun_inside(); alert(lol); }это может быть полезно при построении сложных проектов.
<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>
<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>
как получить входное текстовое значение в 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>
причина, по которой это не работает, заключается в том, что переменная не изменяется с текстовым полем. Когда он изначально запускает код, он получает значение текстового поля, но впоследствии он никогда не вызывается снова. Однако, когда вы определяете переменную в функции, каждый раз, когда вы вызываете функцию, переменная обновляется. Затем он предупреждает переменную, которая теперь равна входу текстового поля.
Comments