Xác thực JavaScript cho trường nhập trống


95

Tôi có trường đầu vào này, <input name="question"/>tôi muốn gọi hàm IsEmpty khi gửi nhấp vào nút gửi.

Tôi đã thử mã bên dưới nhưng không hoạt động. bất kỳ lời khuyên?

<html>

<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=unicode" />
  <meta content="CoffeeCup HTML Editor (www.coffeecup.com)" name="generator" />
</head>

<body>


  <script language="Javascript">
    function IsEmpty() {

      if (document.form.question.value == "") {
        alert("empty");
      }
      return;
    }
  </script>
  Question: <input name="question" /> <br/>

  <input id="insert" onclick="IsEmpty();" type="submit" value="Add Question" />

</body>

</html>


Bạn đã chấp nhận một câu trả lời không hợp lệ . Kiểm tra null là kỳ lạ vì một đầu vào (hoặc vùng văn bản) luôn trả về một Chuỗi. Ngoài ra, bạn không nên sử dụng JavaScript nội tuyến. Ngoài ra, bạn không nên sử dụng một cách mù quáng return false... vv vv
Roko C. Buljan

Câu trả lời:


122

<script type="text/javascript">
  function validateForm() {
    var a = document.forms["Form"]["answer_a"].value;
    var b = document.forms["Form"]["answer_b"].value;
    var c = document.forms["Form"]["answer_c"].value;
    var d = document.forms["Form"]["answer_d"].value;
    if (a == null || a == "", b == null || b == "", c == null || c == "", d == null || d == "") {
      alert("Please Fill All Required Field");
      return false;
    }
  }
</script>

<form method="post" name="Form" onsubmit="return validateForm()" action="">
  <textarea cols="30" rows="2" name="answer_a" id="a"></textarea>
  <textarea cols="30" rows="2" name="answer_b" id="b"></textarea>
  <textarea cols="30" rows="2" name="answer_c" id="c"></textarea>
  <textarea cols="30" rows="2" name="answer_d" id="d"></textarea>
</form>


2
'onsubmit = "return validate ()"' cần được thay đổi. validate không phải là tên của hàm. Nó phải là 'onsubmit = "return validateForm ()"'
tazboy

3
Tốt nhất là giải thích câu trả lời và sự nghi ngờ của OP.
Vishal

7
Điều này được chấp nhận thực sự không hợp lệ. Dấu phẩy trong ifcâu lệnh sẽ chỉ khiến cho séc cuối cùng được trả lại: stackoverflow.com/a/5348007/713874
Bing

35

Xem ví dụ làm việc tại đây


Bạn đang thiếu <form>yếu tố bắt buộc . Đây là cách mã của bạn sẽ như thế nào:

function IsEmpty() {
  if (document.forms['frm'].question.value === "") {
    alert("empty");
    return false;
  }
  return true;
}
<form name="frm">
  Question: <input name="question" /> <br />
  <input id="insert" onclick="return IsEmpty();" type="submit" value="Add Question" />
</form>


Có cách nào để thực hiện việc này cho tất cả các trường trong các biểu mẫu không?
xe đạp dự phòng

34

Một trường đầu vào có thể có khoảng trắng , chúng tôi muốn ngăn chặn điều đó.
Sử dụng String.prototype.trim () :

function isEmpty(str) {
    return !str.trim().length;
}

Thí dụ:

const isEmpty = str => !str.trim().length;

document.getElementById("name").addEventListener("input", function() {
  if( isEmpty(this.value) ) {
    console.log( "NAME is invalid (Empty)" )
  } else {
    console.log( `NAME value is: ${this.value}` );
  }
});
<input id="name" type="text">


1
Ngoài null và "", mã của tôi, tôi cũng thiếu đoạn này. Nó đã làm việc cho tôi. Cảm ơn Roko.
Pedro Sousa

17

Tôi muốn thêm thuộc tính bắt buộc trong trường hợp người dùng tắt javascript:

<input type="text" id="textbox" required/>

Nó hoạt động trên tất cả các trình duyệt hiện đại.


10
if(document.getElementById("question").value.length == 0)
{
    alert("empty")
}

7

Thêm một "câu hỏi" id vào phần tử đầu vào của bạn và sau đó thử điều này:

   if( document.getElementById('question').value === '' ){
      alert('empty');
    }

Lý do mã hiện tại của bạn không hoạt động là vì bạn không có thẻ FORM trong đó. Ngoài ra, tra cứu bằng cách sử dụng "name" không được khuyến khích vì nó không được dùng nữa.

Xem câu trả lời của @Paul Dixon trong bài đăng này: Thuộc tính 'name' có bị coi là lỗi thời đối với thẻ neo <a> không?


1
if(document.getElementById("question").value == "")
{
    alert("empty")
}

1
... không có thuộc tính "id" trên <input>phần tử; điều này sẽ chỉ hoạt động trong IE vì IE bị hỏng.
Pointy 14/10/10

xin lỗi, tôi nghĩ rằng có một ID, document.getElementsByName ("câu hỏi") [0] .value, hoặc chỉ cần thêm một ID vào phần tử
Kenneth J

1

Chỉ cần thêm thẻ ID vào phần tử đầu vào ... tức là:

và kiểm tra giá trị của phần tử trong javascript của bạn:

document.getElementById ("câu hỏi"). value

Oh ya, tải firefox / firebug. Đó là cách duy nhất để làm javascript.


0

Giải pháp của tôi bên dưới là trong es6 vì tôi đã sử dụng constnếu bạn thích es5, bạn có thể thay thế tất cả constbằng var.

const str = "       Hello World!        ";
// const str = "                     ";

checkForWhiteSpaces(str);

function checkForWhiteSpaces(args) {
    const trimmedString = args.trim().length;
    console.log(checkStringLength(trimmedString))     
    return checkStringLength(trimmedString)        
}

// If the browser doesn't support the trim function
// you can make use of the regular expression below

checkForWhiteSpaces2(str);

function checkForWhiteSpaces2(args) {
    const trimmedString = args.replace(/^\s+|\s+$/gm, '').length;
    console.log(checkStringLength(trimmedString))     
    return checkStringLength(trimmedString)
}

function checkStringLength(args) {
    return args > 0 ? "not empty" : "empty string";
}


0

<pre>
       <form name="myform" action="saveNew" method="post" enctype="multipart/form-data">
           <input type="text"   id="name"   name="name" /> 
           <input type="submit"/>
       </form>
    </pre>

<script language="JavaScript" type="text/javascript">
  var frmvalidator = new Validator("myform");
  frmvalidator.EnableFocusOnError(false);
  frmvalidator.EnableMsgsTogether();
  frmvalidator.addValidation("name", "req", "Plese Enter Name");
</script>

trước khi sử dụng mã trên, bạn phải thêm tệp gen_validatorv31.js


0

Kết hợp tất cả các phương pháp, chúng ta có thể làm điều gì đó như sau:

const checkEmpty = document.querySelector('#checkIt');
checkEmpty.addEventListener('input', function () {
  if (checkEmpty.value && // if exist AND
    checkEmpty.value.length > 0 && // if value have one charecter at least
    checkEmpty.value.trim().length > 0 // if value is not just spaces
  ) 
  { console.log('value is:    '+checkEmpty.value);}
  else {console.log('No value'); 
  }
});
<input type="text" id="checkIt" required />

Lưu ý rằng nếu bạn thực sự muốn kiểm tra các giá trị, bạn nên làm điều đó trên máy chủ, nhưng điều này nằm ngoài phạm vi cho câu hỏi này.


0

Bạn có thể lặp lại từng đầu vào sau khi nhấn phụ và kiểm tra xem nó có trống không

let form = document.getElementById('yourform');

form.addEventListener("submit", function(e){ // event into anonymous function
  let ver = true;
  e.preventDefault(); //Prevent submit event from refreshing the page

  e.target.forEach(input => { // input is just a variable name, e.target is the form element
     if(input.length < 1){ // here you're looping through each input of the form and checking its length
         ver = false;
     }
  });

  if(!ver){
      return false;
  }else{
     //continue what you were doing :)
  } 
})

0

<script type="text/javascript">
  function validateForm() {
    var a = document.forms["Form"]["answer_a"].value;
    var b = document.forms["Form"]["answer_b"].value;
    var c = document.forms["Form"]["answer_c"].value;
    var d = document.forms["Form"]["answer_d"].value;
    if (a == null || a == "", b == null || b == "", c == null || c == "", d == null || d == "") {
      alert("Please Fill All Required Field");
      return false;
    }
  }
</script>

<form method="post" name="Form" onsubmit="return validateForm()" action="">
  <textarea cols="30" rows="2" name="answer_a" id="a"></textarea>
  <textarea cols="30" rows="2" name="answer_b" id="b"></textarea>
  <textarea cols="30" rows="2" name="answer_c" id="c"></textarea>
  <textarea cols="30" rows="2" name="answer_d" id="d"></textarea>
</form>


Xin chào, khi bạn đang cung cấp giải pháp, sẽ rất tốt nếu bạn cung cấp lý do tại sao giải pháp của bạn khắc phục được sự cố, điều này có thể giúp ích cho người đọc trong tương lai.
Ehsan Mahmud
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.