2009-12-06 65 views
417

我有一個表單,我希望填寫所有字段。如果一個字段被點擊進入然後沒有填寫,我想顯示一個紅色的背景。使用jQuery檢查輸入是否爲空

這裏是我的代碼:

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

不管它的應用領域正在填寫或者不警告類。

我在做什麼錯?

+1

[**:空僞類代表任何沒有子**的元素。只考慮元素節點和文本(包括空白)。註釋或處理指令不影響元素是否被認爲是空的。](https://developer.mozilla.org/en/docs/Web/CSS/:empty) – 2016-12-23 04:40:13

回答

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

而且你不一定需要.length或者看它是否>0因爲一個空字符串的值爲false但無論如何,如果你想爲可讀性目的:

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

如果你確保它總是在textfield元素上運行,那麼你可以使用this.value。你

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

同時也應該注意到,$('input:text')抓住多個元素,指定一個上下文或使用this關鍵字,如果你只是想一個孤獨的元素的引用(只要是在上下文的後代/兒童一個文本框)。

+1

我認爲如果你改變它會更好if(!$(this).val()):if(!$(this).val()&& $(this).val()!=「」) – alfasin 2012-04-15 22:02:21

+1

$(this).val() 。長度<1 – Tomas 2014-04-30 09:37:27

+2

YourObjNameSpace.yourJqueryInputElement.keyup(函數(e)中{ \t如果($。修剪($(本).VAL())){ \t \t //修整值爲真理 \t}否則{ \t \t //修剪的值是falsey \t} } – 2014-07-30 18:48:32

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

未捕獲TypeError:無法讀取未定義的屬性「長度」 – 2017-10-04 19:17:30

3

:empty僞選擇器可用於查看是否有元素包含沒有孩子的,你應該檢查該值:

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

考慮使用the jQuery validation plugin代替。它對於簡單的必需字段可能稍微有點矯枉過正,但它足夠成熟,可以處理你還沒有想到的邊緣情況(在我們碰到它們之前也不會有任何人)。您可以使用「required」類標記必填字段,在$(document).ready()中運行$('form')。validate(),這就是所需要的。

它甚至託管在微軟CDN也爲交貨快捷:http://www.asp.net/ajaxlibrary/CDN.ashx

134

每個人都有正確的想法,但我喜歡多一點明確的和修剪的值。

$('#apply-form input').blur(function() { 
    if(!$.trim(this.value).length) { // zero-length string AFTER a trim 
      $(this).parents('p').addClass('warning'); 
    } 
}); 
如果你不使用。長度

,那麼「0」的條目可以得到標記爲壞,和5位的條目可以得到標記爲OK沒有$ .trim。好運。

+13

絕對正確。修剪是必要的,尤其是在使用挑剔的所見即所得編輯器(例如jWYSIWYG)時。 – 2010-10-29 22:18:26

+0

我可以建議將值改爲val ---> if(!$。trim(this.val).length){//修剪後的零長度字符串 $(this).parents('p')。addClass ('警告'); } – 2014-03-20 11:43:04

+0

'this.val'在那裏是'undefined'。它需要'$(this).val()' - 但是沒有跨瀏覽器的優勢,所以我爲了簡潔/速度而放棄了它。 – 2014-03-31 21:53:59

0

你可以嘗試這樣的事情:

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

它將適用.blur()活動只爲空值的輸入。

3

還有一件你可能想要考慮的事情,目前它只能添加警告類,如果它是空的,如何在表單不再空時再次刪除類。

這樣的:

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

做它模糊是太有限了。它假設有關於表單域的重點,所以我更願意在提交時完成它,並通過輸入映射。經過多年的處理花式模糊,焦點等技巧,保持簡單的事情將產生更多的可用性。

$('#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..  
}); 
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>// :) 
+0

您可能還需要修剪空白。 – Raptor 2015-02-24 04:29:25

8

爲什麼沒有人提到

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

似乎更jQuery的喜歡我

+3

這在jQuery 1.9+中不起作用,因爲它們改變了選擇器過濾器的工作方式.. http://jsfiddle.net/6r3Rk/ – Wick 2013-07-31 17:57:10

+2

我建議$(this).not('[value]')。addClass('警告')爲1.9 http://jsfiddle.net/znZ9e/ – 2013-07-31 23:11:15

+1

我相信只有測試字段是否以value屬性開始。它不會像驗證所需的那樣測試實際的表單字段值。 http://jsfiddle.net/T89bS/ ...沒有價值屬性的字段不管是否輸入了某些東西,都會被鮭魚拍打。 – Wick 2013-11-14 19:48:11

0

隨着HTML 5,我們可以用「需要」的一項新功能只需將其添加到標籤你想要的像:

<input type='text' required>

+1

OP詢問jQuery – Raptor 2014-08-15 06:09:09

+2

並且所有的瀏覽器都不支持這個...您必須添加js檢查和服務器端檢查 – 2014-10-14 15:44:21

+0

問題標題「使用jQuery檢查輸入是否爲空」 – JoshYates1980 2017-04-07 16:37:37

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

3

function checkForm() { 
 
    return $('input[type=text]').filter(function() { 
 
    return $(this).val().length === 0; 
 
    }).length; 
 
}

7

你也可以使用..

$('#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'); 
    } 
}); 
+1

upvoted for trim – pun 2016-10-07 08:57:51

2

如果用戶已清除箱以及KeyUp事件將檢測(即backspace引發事件,但退格不會引發IE中的按鍵事件)

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

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