すべてのフィールドに入力したいフォームがあります。フィールドをクリックしても入力しないと、赤い背景が表示されます。
これが私のコードです:
$('#apply-form input').blur(function () {
if ($('input:text').is(":empty")) {
$(this).parents('p').addClass('warning');
}
});
記入されているかどうかにかかわらず、警告クラスを適用します。
何がおかしいのですか?
$('#apply-form input').blur(function()
{
if( !$(this).val() ) {
$(this).parents('p').addClass('warning');
}
});
空の文字列はとにかくfalseと評価されるので読みやすくするためにしたいのであれば、必ずしも.length
を必要としないか、>0
かどうかを確認してください。
$('#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つのテキストフィールドがある場合)。
誰もが正しい考えを持っていますが、私はもう少し明示的になり、値を調整するのが好きです。
$('#apply-form input').blur(function() {
if(!$.trim(this.value).length) { // zero-length string AFTER a trim
$(this).parents('p').addClass('warning');
}
});
.lengthを使用しない場合、 '0'のエントリは不正と判断され、5つのスペースのエントリは$ .trimがなければOKとマークされます。幸運を祈ります。
ぼかしでそれをすることはあまりにも限られています。フォームフィールドにフォーカスがあったと想定しているので、送信時に入力フィールドをマッピングすることをお勧めします。ファンシーなぼかし、フォーカスなどのトリックを何年にもわたって扱った後で、物事を単純にしておくことは、それが重要であるところでより多くのユーザビリティを生み出すでしょう。
$('#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..
});
if ($('input:text').val().length == 0) {
$(this).parents('p').addClass('warning');
}
あなたも使えます。
$('#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');
}
});
どうして誰も言わなかった
$(this).filter('[value=]').addClass('warning');
私にはもっとjqueryのようですね
キーアップイベントは、ユーザーがボックスをクリアしたかどうかも検出します(つまり、バックスペースはイベントを発生させますが、バックスペースはキープレスイベントを発生させません)。
$("#inputname").keyup(function() {
if (!this.value) {
alert('The box is empty');
}});
代わりに jQuery検証プラグイン を使用することを検討してください。単純な必須フィールドではやややり過ぎかもしれませんが、まだ考えていないEdgeのケースを処理するのに十分なほど成熟しています(それらが発生するまで私たちの誰もがそうすることもできません)。
必須フィールドを "required"クラスでタグ付けし、$(document).ready()の中で$( 'form')。validate()を実行すれば、それですべてです。
迅速な配信のために、Microsoft CDNでもホストされています: http://www.asp.net/ajaxlibrary/CDN.ashx
:empty
疑似セレクタは、要素に子が含まれていないかどうかを確認するために使用されます。値を確認する必要があります。
$('#apply-form input').blur(function() {
if(!this.value) { // zero-length string
$(this).parents('p').addClass('warning');
}
});
もう1つ考えておきたいことがあります。現在、警告クラスが空の場合にのみ追加できます。フォームが空でなくなった場合はクラスを再度削除する方法について説明します。
このような:
$('#apply-form input').blur(function()
{
if( !$(this).val() ) {
$(this).parents('p').addClass('warning');
} else if ($(this).val()) {
$(this).parents('p').removeClass('warning');
}
});
function checkForm() {
return $('input[type=text]').filter(function () {
return $(this).val().length === 0;
}).length;
}
$(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にONまたはOFFを追加する
これは、選択した入力にキー入力を使った例です。それは同様にトリムを使用して、ちょうど空白文字のシーケンスが真実の反応を引き起こさないことを確認します。これは、検索ボックスまたはその種類の機能に関連するものを開始するために使用できる例です。
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
}
}
あなたはこのようなことを試すことができます:
$('#apply-form input[value!=""]').blur(function() {
$(this).parents('p').addClass('warning');
});
空の値を持つ入力にのみ.blur()
イベントを適用します。
たくさんの答えが集まっていますが、:placeholder-shown
CSSセレクタを使ってこれを行うこともできることを付け加えたいと思います。特にすでにjQを使用していて、入力にプレースホルダがある場合は、IMOを使用するのが少しきれいになります。
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
セレクターを使用することもできます。入力にrequired属性を使用している場合は、これらのセレクターを使用できます。
HTML 5では、私たちはあなたが要求されたいタグにそれを単に追加するという「要求された」新しい機能を使うことができます:
<input type='text' required>
<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>// :)