按下按钮时如何在文本框上触发验证?

时间:2018-08-19 01:00:27

标签: javascript jquery html web

我有两个姓和名的文本框。我也有一个按钮来保存数据。该按钮具有事件处理程序,该事件处理程序从中获取字段中的数据,并使用jquery通过ajax调用将其发布到我的API。

我想对两个文本框进行验证(因此不能将它们留为空白),但是我不知道如何在按下按钮时触发它。我没有为此使用<form>标签;按下按钮时我正在进行ajax调用。

5 个答案:

答案 0 :(得分:1)

以下是一个可以帮助您的示例:

$('#save').click(function() {
  var errors = [];
  var name = $('#name').val();
  var vorname = $('#vorname').val();

  if (!name) {
    errors.push("Name can't be left blank");
  }
  if (!vorname) {
    errors.push("Vorname can't be left blank");
  }
  if (errors.length == 0) {
      console.log('Ajax started');
    //put here your ajax function
  } else {
    for (var i in errors) {
      console.log(errors[i]);
    }
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input placeholder="Name" id="name"><br>
<input placeholder="Vorname" id="vorname"><br>
<button id="save">Save</button>

答案 1 :(得分:1)

这是一个使用流行的jquery validate附加示例。 https://jqueryvalidation.org/ 点击下面的“运行摘要”按钮

$(document).ready(function() {
  $("#form").validate({
    rules: {
      "firstname": {
        required: true,
      },
      "lastname": {
        required: true,
      }
    },
    messages: {
      "firstname": {
        required: "Please, enter a first name"
      },
      "lastname": {
        required: "Please, enter a last name"
      },
    },
    submitHandler: function(form) { // for demo
      alert('valid form submitted'); // for demo
      return false; // for demo
    }
  });

});
body {
  padding: 20px;
}

label {
  display: block;
}

input.error {
  border: 1px solid red;
}

label.error {
  font-weight: normal;
  color: red;
}

button {
  display: block;
  margin-top: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.min.js"></script>

<form id="form" method="post" action="#">
  <label for="firstname">First Name</label>
  <input type="text" name="firstname" id="firstname" />
  <label for="lastname">Last Name</label>
  <input type="text" name="lastname" id="lastname" />
  <button type="submit">Submit</button>
</form>

答案 2 :(得分:1)

在没有看到您的代码的情况下,很难猜测出正确的情况来提供示例。

给出以下HTML:

<html>
<head></head>
<body onload="myFunc();">
    <script>
        function myFunc(){
            setInterval(function(){
            random = (Math.floor((Math.random()*5)+1));
            var plusOrMinus = Math.random() < 0.5 ? -1 : 1;
            random = random * plusOrMinus; 
            currentnumber = document.getElementById('number');
            document.getElementById('number').innerHTML =  parseInt(currentnumber.innerHTML) + random;
            }, 1000);
        }
    </script>
    <div id="number">123</div>
</body>

您可以将其用于jQuery部分:

<form>
  <input type="text" class="text1">
  <input type="text" class="text2">
  <button type="button">Send</button>
</form>

$('button').click(function() { var txt1 = $(this).siblings('.text1').val(); var txt2 = $(this).siblings('.text2').val(); if (txt1.length && txt2.length) { // do your ajaxy stuff here } else { alert("Imput some friggin' text!"); } }); 选择单击的按钮。 $(this)在与单击的按钮相同的块中选择类为.siblings('.text1')的输入。

https://jsfiddle.net/sg1x0c3q/7/

答案 3 :(得分:1)

根据我的评论,我建议使用表格。但是,如果您要使用纯JS解决方案,则可以开始。 (如果您要基于表单的解决方案,只需询问)

// convert all textareas into key value pairs (You can change the selector to be specific to your markup)
const createPayload = () => {
  return [].slice.call(document.querySelectorAll('textarea')).reduce((collection, textarea) => ({
  ...collection,
  [textarea.name]: textarea.value
  }), {})
}

// Compare Object values against values that are not falsy (you could update the filter with a RegExp if you wanted more complicated validation)
const objectHasAllValues = obj => {
  return Object.values(obj).length == Object.values(obj).filter(value => value).length
}

// If all key value pairs are not falsy then submit
window.submit = () => {
  const payload = createPayload()
  if (objectHasAllValues(payload)) {
    fetch('/your/api', payload)
  }
}

此解决方案假定您的API期望有JSON负载。如果您希望发送表单数据,则需要使用formData js api。

这可以缩放,不需要jQuery:)

这里的工作示例https://jsfiddle.net/stwilz/dxg29mkj/28/

答案 4 :(得分:1)

我想对我的两个textboxes进行验证(因此不能将它们留空),但是我不知道如何在按下按钮时触发它。我没有为此使用<form>标签;按下按钮时我正在进行ajax调用。

回答表单验证。我假设First nameLast name只能包含alphabets ,i.e., only a-z and A-Z

//This function will trim extra whitespaces form input.
function trimInput(element){
    $(element).val($(element).val().replace(/\s+/g, " ").trim());
}

//This function will check if the name is empty
function isEmpty(s){
 var valid = /\S+/.test(s);
 return valid;
}

//This function will validate name.
function isName(name){
	var valid = /^[a-zA-Z]*$/.test(name);
	return valid;
}
  
$('#myForm').submit(function(e){
	e.preventDefault();
  var fname = $(this).find('input[name="fname"]');
  var lname = $(this).find('input[name="lname"]');
  var flag = true;
  trimInput(fname);
  trimInput(lname);
  if(isEmpty($(fname).val()) === false || isName($(fname).val()) === false){
  	alert("First name is invalid.");
    flag = false;
  }
  if(isEmpty($(lname).val()) === false || isName($(lname).val()) === false){
  	alert("Last name is invalid.");
    flag = false;
  }
  if(flag){
  	alert("Everything is Okay");
  	//Code to POST form data goes here... 
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name="myform" id="myForm" method="post" action="#">
  <input type="text" name="fname" placeholder="Firstname">
  <input type="text" name="lname" placeholder="Last Name">
  <input type="submit" name="submit" value="Submit">
</form>

我没有为此使用<form>标签。

然后代码将类似于

//This function will trim extra whitespaces form input.
function trimInput(element) {
  $(element).val($(element).val().replace(/\s+/g, " ").trim());
}

//This function will check if the name is empty
function isEmpty(s) {
  var valid = /\S+/.test(s);
  return valid;
}

//This function will validate name.
function isName(name) {
  var valid = /^[a-zA-Z]*$/.test(name);
  return valid;
}

$('#submit').click(function() {
  var fname = $('#fname');
  var lname = $('#lname');
  var flag = true;
  trimInput(fname);
  trimInput(lname);
  if (isEmpty($(fname).val()) === false || isName($(fname).val()) === false) {
    alert("First name is invalid.");
    flag = false;
  }
  if (isEmpty($(lname).val()) === false || isName($(lname).val()) === false) {
    alert("Last name is invalid.");
    flag = false;
  }
  if (flag) {
    alert("Everything is Okay");
    //Code to POST form data goes here... 
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="fname" name="fname" placeholder="Firstname">
<input type="text" id="lname" name="lname" placeholder="Last Name">
<button type="button" id="submit" name="submit">Submit</button>

检查jsFiddle上的代码。 希望这会有所帮助。