ตรวจสอบว่าอินพุตว่างโดยใช้ jQuery


491

ฉันมีแบบฟอร์มที่ฉันต้องการให้ทุกฟิลด์กรอกหากมีการคลิกฟิลด์แล้วไม่ได้กรอกข้อมูลฉันต้องการแสดงพื้นหลังสีแดง

นี่คือรหัสของฉัน:

$('#apply-form input').blur(function () {
  if ($('input:text').is(":empty")) {
    $(this).parents('p').addClass('warning');
  }
});

มันใช้ระดับคำเตือนโดยไม่คำนึงถึงเขตข้อมูลที่ถูกกรอกข้อมูลหรือไม่

ผมทำอะไรผิดหรือเปล่า?


คำตอบ:


764
$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    }
});

และคุณไม่จำเป็นต้องมี.lengthหรือดูว่ามันเป็น>0เพราะสตริงว่างเปล่าประเมินว่าเป็นเท็จอยู่ดี แต่ถ้าคุณต้องการอ่านเพื่อวัตถุประสงค์:

$('#apply-form input').blur(function()
{
    if( $(this).val().length === 0 ) {
        $(this).parents('p').addClass('warning');
    }
});

หากคุณแน่ใจว่ามันจะทำงานบนองค์ประกอบฟิลด์ข้อความคุณก็สามารถใช้งานthis.valueได้

$('#apply-form input').blur(function()
{
      if( !this.value ) {
            $(this).parents('p').addClass('warning');
      }
});

นอกจากนี้คุณควรทราบว่าจะ$('input:text')คว้าองค์ประกอบหลายรายการระบุบริบทหรือใช้thisคำหลักหากคุณต้องการอ้างอิงไปยังองค์ประกอบโดดเดี่ยว (หากมีฟิลด์ข้อความหนึ่งในลูกหลาน / บริบทของบริบท)


2
ฉันคิดว่ามันจะทำงานได้ดีขึ้นถ้าคุณเปลี่ยนจาก: ถ้า (! $ (นี้) .val ()) เป็น: ถ้า (! $ (นี้) .val () && $ (นี้) .val ()! = "" )
alfasin

2
$ (นี้) .val (). length <1
Tomas

3
YourObjNameSpace.yourJqueryInputElement.keyup (ฟังก์ชั่น (e) {ถ้า ($. trim ($. trim ($ (this) .val ()))) {// ค่าที่ถูกตัดเป็นจริง} else {// ค่าที่ถูกตัดเป็น falsey}
Frankie Loscavio

ฉันตรวจสอบความยาวของฟิลด์นาน ๆ ครั้งจนฉันมองข้ามอย่างสมบูรณ์.val().lengthและแทนที่จะใช้.length()กับองค์ประกอบเอง
Tass

เพื่อความทนทานยิ่งขึ้นฉันจะเพิ่ม. trim () ท้ายที่สุด
HQuser

155

ทุกคนมีความคิดที่ถูกต้อง แต่ฉันชอบที่จะพูดให้ชัดเจนยิ่งขึ้นและตัดค่านิยมออกไป

$('#apply-form input').blur(function() {
     if(!$.trim(this.value).length) { // zero-length string AFTER a trim
            $(this).parents('p').addClass('warning');
     }
});

หากคุณไม่ใช้. ความยาวรายการของ '0' จะถูกตั้งค่าสถานะเป็นไม่ดีและรายการของช่องว่าง 5 รายการอาจถูกทำเครื่องหมายว่าใช้ได้โดยไม่มี $ .trim ขอให้โชคดี


18
ถูกต้องที่สุด. การตัดแต่งเป็นสิ่งที่จำเป็นโดยเฉพาะอย่างยิ่งเมื่อใช้ตัวแก้ไข WYSIWYG ที่ประณีต (เช่น jWYSIWYG เป็นต้น)
Josh Smith

ฉันขอแนะนำให้เปลี่ยนค่าเป็น val ---> if (! $. trim (this.val) .length) {// สตริงที่มีความยาวเป็นศูนย์หลังจากตัดแต่ง $ (this) .parents ('p'). addClass (' คำเตือน'); }
K. Kilian Lindberg

this.valจะundefinedมี มันจำเป็นต้องเป็น$(this).val()- แต่ไม่มีข้อได้เปรียบข้ามเบราว์เซอร์ดังนั้นฉันจึงทิ้งมันไว้เพื่อความกะทัดรัด / ความเร็ว
Alex Sexton

33

การทำเบลอนั้นมี จำกัด มากเกินไป มันถือว่ามีการมุ่งเน้นไปที่เขตข้อมูลแบบฟอร์มดังนั้นฉันชอบที่จะทำมันในการส่งและแผนที่ผ่านการป้อนข้อมูล หลังจากหลายปีของการจัดการกับความพร่ามัวโฟกัส ฯลฯ เทคนิคการทำให้สิ่งต่าง ๆ ง่ายขึ้นจะทำให้การใช้งานมากขึ้น

$('#signupform').submit(function() {
    var errors = 0;
    $("#signupform :input").map(function(){
         if( !$(this).val() ) {
              $(this).parents('td').addClass('warning');
              errors++;
        } else if ($(this).val()) {
              $(this).parents('td').removeClass('warning');
        }   
    });
    if(errors > 0){
        $('#errorwarn').text("All fields are required");
        return false;
    }
    // do the ajax..    
});

20
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}

Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'length' ของ undefined
Chuck D

@ ChuckD ฉันได้รับข้อผิดพลาดเดียวกันและฉันคิดว่าฉันหายไป$ในif (('input:text').val().length == 0) {มันควรจะเป็นif ($('input:text').val().length == 0) {
fWd82

16

คุณสามารถใช้ ..

$('#apply-form input').blur(function()
{
    if( $(this).val() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});

หากคุณมีข้อสงสัยเกี่ยวกับช่องว่างลอง ..

$('#apply-form input').blur(function()
{
    if( $(this).val().trim() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});

9

ทำไมไม่มีใครพูดถึง

$(this).filter('[value=]').addClass('warning');

ดูเหมือนว่าฉันชอบ jquery มากขึ้น


3
สิ่งนี้ไม่ทำงานใน jQuery 1.9+ เนื่องจากพวกเขาเปลี่ยนวิธีการทำงานของตัวกรองตัวเลือก .. jsfiddle.net/6r3Rk
Wick

2
ฉันแนะนำ $ (นี่). not ('[ค่า]'). addClass ('คำเตือน') สำหรับ 1.9 jsfiddle.net/znZ9e
Jamie Pate

1
ฉันเชื่อว่าจะทดสอบว่าสนามเริ่มต้นด้วยแอตทริบิวต์ค่าหรือไม่ มันไม่ได้ทดสอบค่าฟิลด์แบบฟอร์มจริงอย่างที่คุณต้องการสำหรับการตรวจสอบ jsfiddle.net/T89bS ... ฟิลด์ที่ไม่มีแอ็ตทริบิวต์ค่าจะตบด้วยปลาแซลมอนโดยไม่คำนึงว่าคุณพิมพ์อะไรลงไป
ตะเกียง

5

เหตุการณ์ keyup จะตรวจสอบว่าผู้ใช้ล้างกล่องด้วยหรือไม่ (เช่น backspace ทำให้เกิดเหตุการณ์ แต่ backspace ไม่เพิ่มเหตุการณ์ keypress ใน IE)

    $("#inputname").keyup(function() {

if (!this.value) {
    alert('The box is empty');
}});

4

พิจารณาใช้ปลั๊กอินตรวจสอบ jQueryแทน อาจเป็นเรื่องที่เกินความจำเป็นเล็กน้อยสำหรับฟิลด์ที่ต้องการอย่างง่าย ๆ แต่มันก็โตพอที่จะจัดการกับเคสที่คุณยังไม่เคยคิดมาก่อนเลย

คุณสามารถแท็กฟิลด์ที่จำเป็นด้วยคลาส "จำเป็น" เรียกใช้ $ ('ฟอร์ม') ตรวจสอบ () ใน $ (เอกสาร) .ready () และนั่นคือทั้งหมดที่ต้องใช้

มันยังโฮสต์บน Microsoft CDN ด้วยเช่นกันเพื่อการจัดส่งที่รวดเร็ว: http://www.asp.net/ajaxlibrary/CDN.ashx


3

:emptyหลอกตัวเลือกจะใช้ในการดูว่าเป็นองค์ประกอบที่ไม่มีพระเกศาคุณควรตรวจสอบค่า:

$('#apply-form input').blur(function() {
     if(!this.value) { // zero-length string
            $(this).parents('p').addClass('warning');
     }
});

3

มีอีกสิ่งหนึ่งที่คุณอาจต้องการคิดถึงตอนนี้มันสามารถเพิ่มระดับคำเตือนถ้าว่างเท่านั้นวิธีลบชั้นเรียนอีกครั้งเมื่อแบบฟอร์มไม่ว่างเปล่าอีกต่อไป

แบบนี้:

$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    } else if ($(this).val()) {
          $(this).parents('p').removeClass('warning');
    }
});


2

นี่คือตัวอย่างการใช้การกดคีย์สำหรับอินพุตที่เลือก มันใช้การตัดแต่งเช่นกันเพื่อให้แน่ใจว่าลำดับของอักขระช่องว่างเพียงสีขาวไม่ก่อให้เกิดการตอบสนองที่แท้จริง นี่คือตัวอย่างที่สามารถใช้เพื่อเริ่มต้นกล่องค้นหาหรือสิ่งที่เกี่ยวข้องกับการทำงานประเภทนั้น

YourObjNameSpace.yourJqueryInputElement.keyup(function (e){
   if($.trim($(this).val())){
       // trimmed value is truthy meaning real characters are entered
    }else{
       // trimmed value is falsey meaning empty input excluding just whitespace characters
    }
}

2
$(function() {
  var fields = $('#search_form').serializeArray();
  is_blank = true;
  for (var i = 0; i < fields.length; i++) {
    // excluded fields
    if ((fields[i].name != "locale") && (fields[i].name != "utf8")) {
      if (fields[i].value) {
        is_blank = false;
      }
    }
  }
  if (is_blank) {
    $('#filters-button').append(': OFF');
  }
  else {
    $('#filters-button').append(': ON');
  }
});

ตรวจสอบว่าฟิลด์ทั้งหมดว่างเปล่าหรือไม่และต่อท้ายหรือปิดที่ Filter_button


1

คุณสามารถลองสิ่งนี้:

$('#apply-form input[value!=""]').blur(function() {
    $(this).parents('p').addClass('warning');
});

มันจะใช้.blur()เหตุการณ์เฉพาะอินพุตที่มีค่าว่าง


วิธีแก้ปัญหาที่ดี แต่ถูกเตือนว่าจะใช้งานได้ก็ต่อเมื่ออินพุตไม่ว่างเปล่าเมื่อมีการเรียกใช้ฟังก์ชั่นและยังใช้ได้เฉพาะในกรณีที่ค่าถูกบันทึกไว้ในแอตทริบิวต์ "value" ของอินพุต
Fabian von Ellerts

0
<script type="text/javascript">
$('input:text, input:password, textarea').blur(function()
    {
          var check = $(this).val();
          if(check == '')
          {
                $(this).parent().addClass('ym-error');
          }
          else
          {
                $(this).parent().removeClass('ym-error');  
          }
    });
 </script>// :)

คุณอาจต้องตัดช่องว่างด้วย
Raptor

0

ด้วย HTML 5 เราสามารถใช้คุณสมบัติใหม่ "ต้องการ" เพียงแค่เพิ่มลงในแท็กที่คุณต้องการเช่น:

<input type='text' required>


2
และเบราว์เซอร์ทั้งหมดไม่สนับสนุนสิ่งนี้ ... คุณต้องเพิ่มการตรวจสอบ js และการตรวจสอบ
เซิร์ฟเวอร์

ชื่อคำถาม "ตรวจสอบว่าอินพุตว่างโดยใช้ jQuery"
JoshYates1980

0

ชุดคำตอบที่ยอดเยี่ยมต้องการเพิ่มว่าคุณสามารถทำได้โดยใช้:placeholder-shownตัวเลือก CSS ทำความสะอาดเล็กน้อยที่จะใช้ IMO โดยเฉพาะถ้าคุณใช้ jQ อยู่แล้วและมีตัวยึดตำแหน่งในอินพุตของคุณ

if ($('input#cust-descrip').is(':placeholder-shown')) {
  console.log('Empty');
}

$('input#cust-descrip').on('blur', '', function(ev) {
  if (!$('input#cust-descrip').is(':placeholder-shown')) {
    console.log('Has Text!');
  }
  else {
    console.log('Empty!');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" class="form-control" id="cust-descrip" autocomplete="off" placeholder="Description">

คุณยังสามารถใช้ประโยชน์จาก:validและ:invalidตัวเลือกถ้าคุณมีอินพุตที่จำเป็น คุณสามารถใช้ตัวเลือกเหล่านี้หากคุณใช้แอททริบิวที่ต้องการในอินพุต


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.