如何使用JavaScript获取文本输入字段的值?

1227

我正在使用JavaScript进行搜索。我本来想使用表单,但这会影响到页面上的其他部分。我有一个输入文本框:

<input name="searchTxt" type="text" maxlength="512" id="searchTxt" class="searchField"/>

这是我的 JavaScript 代码:

<script type="text/javascript">
  function searchURL(){
    window.location = "http://www.myurl.com/search/" + (input text value);
  }
</script>

如何将文本框中的值传递到JavaScript中?

16个回答

2351

有多种方法可以直接获取输入文本框的值(而不包装在表单元素内):

方法一

document.getElementById('textbox_id').value 获取所需文本框的值

例如

document.getElementById("searchTxt").value;

  注意:方法二、三、四和六返回一个元素集合,因此使用[整数]来获取所需的出现次数。 对于第一个元素,使用[0], 对于第二个元素,请使用[1],依此类推...

方法二

使用 document.getElementsByClassName('class_name')[whole_number].value,该方法返回一个活动的 HTMLCollection

例如

document.getElementsByClassName("searchField")[0].value; 如果这是页面中的第一个文本框,则使用此方法。

方法三

使用document.getElementsByTagName('tag_name')[whole_number].value,该方法也返回一个活动的HTMLCollection

例如

document.getElementsByTagName("input")[0].value; 如果这是页面中的第一个文本框,则使用此方法。

方法四

document.getElementsByName('name')[whole_number].value,该方法也返回一个活动的NodeList

例如

document.getElementsByName("searchTxt")[0].value; 如果这是页面中第一个带名称“searchtext”的文本框,则使用此方法。

方法五

使用强大的document.querySelector('selector').value,该方法使用CSS选择器选择元素

例如

  • document.querySelector('#searchTxt').value; 通过id选择
  • document.querySelector('.searchField').value; 通过class选择
  • document.querySelector('input').value; 通过标签名选择元素
  • document.querySelector('[name="searchTxt"]').value; 通过名称选择元素
  • 方法6

    document.querySelectorAll('选择器')[整数].value 同样使用CSS选择器来选取元素,但它返回包含所有符合选择器的静态节点列表。

    例如

    • document.querySelectorAll('#searchTxt')[0].value; 通过ID选择元素
    • document.querySelectorAll('.searchField')[0].value; 通过类选择元素
    • document.querySelectorAll('input')[0].value; 通过标签名选择元素
    • document.querySelectorAll('[name="searchTxt"]')[0].value; 通过名称选择元素

    支持性

    浏览器 方法1 方法2 方法3 方法4 方法5/6
    IE6 Y(有错) N Y Y(有错) N
    IE7 Y(有错) N Y Y(有错) N
    IE8 Y N Y Y(有错) Y
    IE9 Y Y Y Y(有错) Y
    IE10 Y Y Y Y Y
    FF3.0 支持 支持 支持 支持 不支持 IE=Internet Explorer
    FF3.5/FF3.6 支持 支持 支持 支持 支持 FF=Mozilla Firefox
    FF4b1 支持 支持 支持 支持 支持 GC=Google Chrome
    GC4/GC5 支持 支持 支持 支持 支持 Y=YES,N=NO
    Safari4/Safari5 支持 支持 支持 支持 支持
    Opera10.10/
    Opera10.53/ 支持 支持 支持 支持(有Bug) 支持
    Opera10.60
    Opera 12 支持 支持 支持 支持 支持

    有用的链接

    1. 点击此处查看所有这些方法的支持情况及包括更多细节的错误信息
    2. 静态集合和动态集合的区别 点击这里
    3. NodeList 和 HTMLCollection 的区别 点击这里

    document.getElementByID("<%=searchTxt.ClientID %>").value 也是有效的,当 document.getElementByID("searchText").value 失效时,我已经使用过它。 - Amicable
    @Amicable,你的应用程序不是HTML和JS。如果我没记错的话,你在使用ASP对吧。我对ASP并不了解,所以无法多说,但这里提供的方法是通用的,适用于大多数情况。 - bugwheels94
    1
    @GKislin 啊!我明白了。很高兴我不知道这件事。但是在阅读了这篇文章之后,我现在有些不愿意将此编辑添加到答案中。也许以后的某一天,我会加上一个警告来避免它。其中一个警告的原因是这个。如果你觉得它真的很好,那么可以根据自己的意愿进行编辑并添加警告或者另外回答 :) - bugwheels94
    1
    @calyxofheld 要么使用forEach方法,要么使用for循环遍历它们。这是JS中非常基本的事情。你是否简要地学习过JS?如果没有,我建议你先学习一下。继续学习吧。 - bugwheels94
    1
    @GuidoG 你的代码很可能有一些bug。 - bugwheels94
    显示剩余11条评论

    44
    //creates a listener for when you press a key
    window.onkeyup = keyup;
    
    //creates a global Javascript variable
    var inputTextValue;
    
    function keyup(e) {
      //setting your input text to the global Javascript Variable for every key press
      inputTextValue = e.target.value;
    
      //listens for you to press the ENTER key, at which point your web address will change to the one you have input in the search box
      if (e.keyCode == 13) {
        window.location = "http://www.myurl.com/search/" + inputTextValue;
      }
    }
    

    点击这里在 CodePen 上查看实际效果。


    虽然我欣赏被接受的回答的全面性,但我发现这个答案对于在JS代码中访问输入在DOM文本输入元素(文本框)中的值很有用。详情请参见我在此问题的其他地方给出的答案。 - Victoria Stuart

    33

    我会创建一个变量来存储输入,就像这样:

    var input = document.getElementById("input_id").value;
    

    然后我会使用这个变量将输入的值添加到字符串中。

    = "你的字符串" + input;


    如果您想让它成为一个合适的Javascript对象,以便可以通过编程方式访问每个属性,请执行以下操作:var input = JSON.parse(document.getElementById("input_id").value); - JakeJ

    23

    您应该能够输入:

    var input = document.getElementById("searchTxt");
    
    function searchURL() {
         window.location = "http://www.myurl.com/search/" + input.value;
    }
    <input name="searchTxt" type="text" maxlength="512" id="searchTxt" class="searchField"/>

    我相信有更好的方法来完成这个任务,但是这种方法似乎可以在所有浏览器上使用,并且只需要最基本的JavaScript知识就能制作、改进和编辑。


    16

    此外,您可以通过标签名称进行调用,例如:form_name.input_name.value; 这样,您将获得特定表单中特定输入的具体值。


    是的!我对这种简单性感到惊讶。看一下简单计算器的实现:http://www.4stud.info/web-programming/samples/dhtml-calculator.html 有没有关于这个JavaScript功能的参考资料,因为以前我总是使用jQuery或getElementById。 - Grigory Kislin

    11

    简短

    您可以通过searchTxt.value来读取值。

    <input name="searchTxt" type="text" maxlength="512" id="searchTxt" class="searchField"/>
    
    <script type="text/javascript">
      function searchURL(){
        console.log(searchTxt.value);
        // window.location = "http://www.myurl.com/search/" + searchTxt.value;
      }
    </script>
    
    
    
    
    
    <!-- SHORT ugly test code -->
    <button class="search" onclick="searchURL()">Search</button>


    编辑没问题;关于踩票的评论不应该出现在帖子中。请在帖子解锁后避免回滚。 - Zoe stands with Ukraine
    @Kamil - 你知道获取数据的这种简写方法叫什么吗?还是你有参考文献来解释一下这是什么?我在某些代码中遇到了它,让我在代码库中寻找querySelector。这是一个很棒的功能,只是与JS与代码交互的“正常”方式非常不同。谢谢。 - Wally
    @Wally 这不太好。这个问题在其他几个答案的评论中也有讨论。https://dev59.com/-3A75IYBdhLWcg3wK1wp#3434388 为什么它不太好:https://jsfiddle.net/p94ygswy/4/ - bugwheels94

    8

    如果你的 input 是在一个 form 中,想要在提交后获取该值,可以像这样做:

    <form onsubmit="submitLoginForm(event)">
        <input type="text" name="name">
        <input type="password" name="password">
        <input type="submit" value="Login">
    </form>
    
    <script type="text/javascript">
    
        function submitLoginForm(event){
            event.preventDefault();
    
            console.log(event.target['name'].value);
            console.log(event.target['password'].value);
        }
    </script>
    

    这种方法的优点:例如您的页面有2个表单用于输入发送者接收者信息。

    如果您不使用表单获取值,则可以

    • 为每个字段设置两个不同的id(或标签名称...),如sender-namereceiver-namesender-addressreceiver-address...
    • 如果您为两个输入设置相同的值,则需要在getElementsByName(或getElementsByTagName...)之后记住0或1是sender还是receiver。稍后,如果您更改HTML中2个表单的顺序,则需要再次检查此代码

    如果您使用表单,则可以使用名称地址等。


    7
    你可以在有多个输入字段时使用onkeyup。假设你有四个或更多的输入字段。然后document.getElementById('something').value很麻烦。我们需要编写四行代码来获取输入字段的值。
    因此,你可以创建一个函数,在键盘按下或松开事件中将值存储在对象中。
    示例:
    <div class="container">
        <div>
            <label for="">Name</label>
            <input type="text" name="fname" id="fname" onkeyup=handleInput(this)>
        </div>
        <div>
            <label for="">Age</label>
            <input type="number" name="age" id="age" onkeyup=handleInput(this)>
        </div>
        <div>
            <label for="">Email</label>
            <input type="text" name="email" id="email" onkeyup=handleInput(this)>
        </div>
        <div>
            <label for="">Mobile</label>
            <input type="number" name="mobile" id="number" onkeyup=handleInput(this)>
        </div>
        <div>
            <button onclick=submitData()>Submit</button>
        </div>
    </div>
    

    JavaScript:

    <script>
        const data = { };
    
        function handleInput(e){
            data[e.name] = e.value;
        }
    
        function submitData(){
            console.log(data.fname); // Get the first name from the object
            console.log(data); // return object
        }
    </script>
    

    7
    <input type="text" onkeyup="trackChange(this.value)" id="myInput">
    <script>
        function trackChange(value) {
            window.open("http://www.google.com/search?output=search&q=" + value)
        }
    </script>
    

    5

    在Chrome和Firefox中进行测试:

    通过元素ID获取值:

    <input type="text" maxlength="512" id="searchTxt" class="searchField"/>
    <input type="button" value="Get Value" onclick="alert(searchTxt.value)">
    

    在表单元素中设置值:

    <form name="calc" id="calculator">
      <input type="text" name="input">
      <input type="button" value="Set Value" onclick="calc.input.value='Set Value'">
    </form>
    

    点击此链接查看示例代码。

    另外,您也可以查看JavaScript计算器实现

    来自@bugwheels94的提示:使用此方法时,请注意此问题


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接