jQuery 显示表单文本输入

Posted

技术标签:

【中文标题】jQuery 显示表单文本输入【英文标题】:jQuery Display Form Text Input 【发布时间】:2020-12-13 12:48:27 【问题描述】:

我对 jQuery 很陌生,所以我对如何使它工作感到有些困惑。基本上,我有一个表格,其中包含学生 ID、学生姓名、学生出生日期和学生年龄等输入字段。一旦用户将他们的信息输入到字段中,我希望输入以以下格式显示下面表单: 学生证:(输入值) 学生姓名:(输入值)等

这是我目前的代码:

$(document).ready(function() 
$("#submitButton").on("click", function(e) 
  e.preventDefault();
  var input = $("#q1").val()
  $("#show").html(input)
)

$("#submitButton").on("click", function(e) 
    e.preventDefault();
    var input = $("#q2").val()
    $("#show").html(input)
  ) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="form">
<table>
    <tr>
      <label>Student Id <input id="q1" type="text" placeholder="required"/>*</label><br>
      <label>Student Name <input id="q2" type="text" placeholder="required"/>*</label><br>
      <label>Student DOB <input id="q3" type="datetime" placeholder="required"/>*</label><br>
      <label>Student Age <input id="q4" type="number" placeholder="required"/>*</label><br>
    </tr>
</table>
<button type="button" id="submitButton" class="button">Login</button>
<span id="show"></span>

到目前为止,当您按下“提交”时,只会显示输入的第二个值,而不是第一个。我最终需要在底部显示所有字段,但第二个值当前位于表单的左侧。感谢任何帮助/指导!

【问题讨论】:

您正在替换 $("#show") 的内容两次 .... 所以第二次清除了第一次。尝试append() 而不是 html()。也不需要两个事件监听器,只是不必要地重复代码 这能回答你的问题吗? Get the value in an input text box 【参考方案1】:

您只需要一个用于单击的处理程序,并使用该函数将您想要的两个值的字符串放在一起。这是一种写法:

$(document).ready(function() 
  $("#submitButton").on("click", function(e) 
    e.preventDefault();
    var studentId = $("#q1").val();
    var studentName = $("#q2").val();
    $("#show").html(`Student ID: $studentId, Student Name: $studentName`);
  );
);

请注意,最后一行中的结构,带有反引号和$... 语法,是template literal,如果你必须在像 IE 这样的非常旧的浏览器上运行它,它将无法工作。 (在这个时代,你真的不应该这样做,但由于你仍在使用var 来声明变量,我觉得我可能不得不涵盖这种情况。)在那种情况下你可以很容易地重新创建相同的字符串,只是读起来会不太好听,就像"Student ID: " + studentId + ", Student Name: " + studentName

【讨论】:

【参考方案2】:

我将 span 设置为一个 div,我只是循环遍历 input 元素并获取标签文本和输入值。您还只需要一个单击处理程序。

$("#submitButton").click(function()
  output = "";
  $("input").each(function()
    output += $(this).parent("label").text().replace("*","") + ": " + $(this).val() + "<br>";
  );
  
  $("#show").html(output);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="form">
<table>
    <tr>
      <label>Student Id <input id="q1" type="text" placeholder="required"/>*</label><br>
      <label>Student Name <input id="q2" type="text" placeholder="required"/>*</label><br>
      <label>Student DOB <input id="q3" type="datetime" placeholder="required"/>*</label><br>
      <label>Student Age <input id="q4" type="number" placeholder="required"/>*</label><br>
    </tr>
</table>
<button type="button" id="submitButton" class="button">Login</button>
<div id="show"></div>

【讨论】:

【参考方案3】:

您正在做的是为表单提交创建两个单独的事件处理程序,一个用于 id,一个用于名称。因此,在表单提交时,将调用两个函数并相互踩踏,其中一个取消另一个的动作。

您应该将您的功能分组到一个事件处理程序中。

现在,我强烈建议获取表单输入值的一种简洁方法是为输入分配名称,并使用form's onsubmit 事件,例如年龄:

<input id="q4" type="number" placeholder="required" name="age"/>

然后,在表单的onsubmit 事件处理程序中,可以通过关键字this 访问表单,正如我在sn-p 的cmets 中解释的那样。 这样,可以通过this.age.value 访问输入的年龄。很整洁!

把东西放在一起:

$("#form").on("submit", function(e) 
  //prevent form submit from refreshing the page or redirecting
  e.preventDefault();
  
  //get form input values
  //inside an event handler, `this` points to the element 
  //to which the event handler is attached (in this case the form)
  
  
  //dispplay results in span
  $("#show").html(`Name: $this.name.value, DOB: $this.dob.value, Age: $this.age.value`);
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="form">
<table>
    <tr>
      <label>Student Id <input id="q1" type="text" placeholder="required"/>*</label><br>
      <label>Student Name <input id="q2" type="text" placeholder="required" name="name"/>*</label><br>
      <label>Student DOB <input id="q3" type="datetime" placeholder="required" name="dob"/>*</label><br>
      <label>Student Age <input id="q4" type="number" placeholder="required" name="age"/>*</label><br>
    </tr>
</table>
<button type="submit" id="submitButton" class="button">Login</button>
<span id="show"></span>

【讨论】:

【参考方案4】:

问题已解决

$( document ).ready(function() 
   $("#submitButton").on("click", function(e) 
    e.preventDefault();
    var input = 'Std ID -  '+$("#q1").val() +'</br> Std ID -  '+$("#q2").val() +'</br> Std ID -  '+$("#q3").val() +'</br>Std ID -  '+$("#q4").val() +'</br>';
  
    $("#show").html(input);
  )
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="form">
<div>Table</div>
<table>
    <tr>
      <label>Student Id <input id="q1" type="text" placeholder="required"/>*</label><br>
      <label>Student Name <input id="q2" type="text" placeholder="required"/>*</label><br>
      <label>Student DOB <input id="q3" type="datetime" placeholder="required"/>*</label><br>
      <label>Student Age <input id="q4" type="number" placeholder="required"/>*</label><br>
    </tr>
</table>
<button type="button" id="submitButton" class="button">Login</button>
<br><br>
<span id="show"></span>

【讨论】:

【参考方案5】:

只用 javascript(和一点 css - 真正困难的部分)就很容易做到

在表单中,names属性用于直接标识每个元素(不需要放ID)

您还必须通过&lt;form&gt; 本身(而不是按钮)使用submit 事件

const myForm  = document.getElementById('my-form')
  ,   showDiv = document.getElementById('show-div')
  ;

myForm.onsubmit = e =>
  
  e.preventDefault()
  showDiv.innerHTML = 
    `Student Id..: $myForm.Student_Id.value <br>
     Student Name: $myForm.Student_Name.value <br>
     Student DOB.: $myForm.Student_DOB.value <br>
     Student Age.: $myForm.Student_Age.value `
  
  
// suggestion for init
myForm.Student_DOB.valueAsDate = new Date()  // today!
myForm.Student_Age.valueAsNumber = 20       // less or more...
label 
  width:   20em;
  display: block;
  float:   left;
  clear:   both;
  line-height: 2.7em;
  
label:before 
  content: '*';
  float:   right;
  
input 
  float: right;
  margin-right: .4em;
  width: 12em;
  height: 1.2em;
  margin: .3em;
  
button 
  display: block;
  float:   left;
  clear:   both;
  margin-top: 1em;
  
#show-div 
  float:       left;
  clear:       both;
  margin:      1em;
  font-family: monospace;
  
<form id="my-form">
  <label>
    Student Id 
    <input name="Student_Id" type="text" placeholder="required"/> 
  </label>
  <label>
    Student Name
    <input name="Student_Name" type="text" placeholder="required"/>
  </label>
  <label>
    Student DOB
    <input name="Student_DOB" type="date" placeholder="required"/>
  </label>
  <label>
    Student Age
    <input name="Student_Age" type="number" placeholder="required"/>
  </label>
  <button type="submit">Login</button>
</form>
  
<div id="show-div"></div>

【讨论】:

以上是关于jQuery 显示表单文本输入的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 表单规则显示文本框时验证文本框

如何使用 jQuery 在页面加载时关注表单输入文本字段?

jQuery UI高亮效果可以应用于表单文本输入吗?

Swift IOS在实时jquery中捕获html表单输入

克隆 JQuery 后添加额外的输入文本

我无法在 jQuery UI 手风琴内的表单中输入文本