如何在 JavaScript 中获取输入文本值

IT技术 javascript text input get
2021-02-10 16:38:03

如何在 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(),如上所示,它不起作用,但当我把它放在里面时,它起作用。谁能告诉我为什么?

6个回答

函数在lol外部定义时不起作用的原因是,当 JavaScript 首次运行时,DOM尚未加载。因此,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 来完成,但使用像jQuery这样的 DOM 库要容易得多

例如:

<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处理程序,而不是在 HTML 中进行内联。

只是一个评论,但是......为什么在询问纯粹的 jscript 问题时使用 jquery 回答?jquery 很棒,但肯定不是每个网页都绝对需要。也许用户要编写 javascript 100%“纯”。看看:youmightnotneedjquery.com
2021-04-08 16:38:03
第一个解决方案的第二个问题是它读取的输入值不是在按钮被点击的确切时间。您在第二个解决方案中使用 jQuery 的 val() 方法解决了这个问题。
2021-04-14 16:38:03

不要以这种方式使用全局变量。即使这可行,也是糟糕的编程风格。您可能会以这种方式无意中覆盖重要数据。改为这样做:

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

语言= cdata [ CI ]

已弃用此属性指定此元素内容的脚本语言。它的值是语言的标识符,但由于这些标识符不是标准的,因此该属性已被弃用,以支持类型。

不推荐使用的元素或属性已被较新的构造过时。[…] 不推荐使用的元素在未来的 HTML 版本中可能会过时。[…] 该规范包括说明如何避免使用不推荐使用的元素的示例。[…]

<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 = document.getElementById('lolz').value;

<input>标记的实际元素之前

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

您的代码被逐行解析,并且lol = ...在浏览器知props有 id 的输入的存在之前评估lolz因此,document.getElementById('lolz')将返回null,并且document.getElementById('lolz').value应该导致错误。

在函数内移动那条线,它应该可以工作。这样,该行只会在调用函数时运行。var按照其他人的建议使用,以避免使其成为全局变量:

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

您还可以将脚本移动到页面的末尾。将所有脚本块移动到 HTML 的末尾<body>是当今避免此类引用问题的标准做法。它还倾向于加快页面加载速度,因为加载和解析需要很长时间的脚本是在(大部分)显示 HTML 之后处理的。

无论是否在这种情况下,我认为我们应该提供最佳实践:)
2021-03-16 16:38:03
@user1561559 我刚刚修复了一个错误:您发布的行不会导致分配undefinedlol,它会导致 js 错误。
2021-03-16 16:38:03
是的,这是一种选择。在快速加载方面,在这种情况下不会有太大区别。
2021-03-25 16:38:03
很清楚的解释,谢谢!
2021-04-07 16:38:03
还需要注意的是,为了快速加载,javascript 应该放在页面的底部,而不是像上面示例中所示的 html 之前。然后它也识别给定的 html 元素。
2021-04-11 16:38:03

编辑:

  1. 将您的 javascript 移动到页面的末尾,以确保在访问它们之前加载 DOM(html 元素)(javascript 以结束快速加载)。
  2. 使用var textInputVal = document.getElementById('textInputId').value;始终像示例中一样声明您的变量
  3. 为输入和元素使用描述性名称(更容易理解您自己的代码以及当其他人正在查看它时)。
  4. 要查看有关 getElementById 的更多信息,请参阅:http : //www.tizag.com/javascriptT/javascript-getelementbyid.php
  5. 使用 jQuery 等库使使用 javascript 变得容易一百倍,要了解更多信息:http : //docs.jquery.com/Tutorials : Getting_Started_with_jQuery
请参阅 bfavarettos 的回答和我的评论以获得完整的解释,他更快!:)
2021-03-19 16:38:03