jQuery .val() 为输入元素返回一个空字符串

jQuery .val() is returning an empty string for input element

我在 div 中有几个输入元素,我正在尝试使用 jQuery 来 1) 检查第一个输入的内容,如果它不是空白,则显示下一个输入,依此类推。但是,我遇到的问题是无论我在输入框中键入什么,.val() returns 在浏览器控制台中都是一个空字符串。

HTML:

<div class="col-sm-6">
  <span class="team-member-form" id="team-member-1-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-2-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-3-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-4-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-5-form">
    <input class="form-control" type="text"></input>
    <br/>
  
</div>

Javascript:

 $('.team-member-form').on('keyup', function() {
                var teamMemberForm = $(this).attr('id');
                var teamMemberNumber = teamMemberForm.split('-')[2];
                var teamMemberFormValue = $(this).val();
                console.log(teamMemberFormValue);

所以无论我在输入中键入什么,console.log 都只是一个空字符串。有什么想法吗?

我们需要将 keyup 事件附加到输入元素。 目前它附在 span.

我包含了一个代码片段,它将 keyup 绑定到 .form-control

$('.team-member-form .form-control').on('keyup', function() {
  var teamMemberFormValue = $(this).val();
  console.log(teamMemberFormValue);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-6">
  <span class="team-member-form" id="team-member-1-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-2-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-3-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-4-form">
    <input class="form-control" type="text"></input>
    <br/>
  <span class="team-member-form" id="team-member-5-form">
    <input class="form-control" type="text"></input>
    <br/>
  
</div>

考虑以下示例。

$(function() {
  $('.team-member-form > input').on('keyup', function() {
    var teamMemberForm = $(this).parent().attr('id');
    var teamMemberNumber = teamMemberForm.split('-')[2];
    var teamMemberFormValue = $(this).val();
    console.log(teamMemberFormValue);
  });
});
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-6">
  <div class="team-member-form" id="team-member-1-form">
    <input class="form-control" type="text" />
  </div>
  <div class="team-member-form" id="team-member-2-form">
    <input class="form-control" type="text" />
  </div>
  <div class="team-member-form" id="team-member-3-form">
    <input class="form-control" type="text" />
  </div>
  <div class="team-member-form" id="team-member-4-form">
    <input class="form-control" type="text" />
  </div>
  <div class="team-member-form" id="team-member-5-form">
    <input class="form-control" type="text" />
  </div>
</div>

您的代码实践很差 HTML。您的 <span> 标签已打开,但尚未关闭。当不需要时,您还为 <input> 设置了结束标记。我将它们更改为 <div> 并首先清理了 HTML。

现在,对于 jQuery,我们将 select 或首先调整为 select <input> 元素。这将有助于 keyup 事件,但会给 this 一个不同的参考。我们可以使用 .parent() 到 select 父元素并获得 id 属性。

如果你不想使用 jQuery 你也可以使用纯 JS

document.querySelectorAll('.team-member-form .form-control').forEach(element => {
  element.addEventListener('keyup', e => {
    console.log(e.value)
  })
})