2017-09-07 8 views
0

.focusout()を起動したい場合は、myInput.val() < 0.2が無条件で起動する場合のみ起動します。私は何が間違っているのだろうか。jQueryで入力値が0.2未満の場合のファイヤー機能

jQuery('input[type=text]').on('input', function() { 
 
    var myInput = jQuery(this); 
 
    jQuery(this).val(jQuery(this).val().replace(/,/g, '.')); 
 
    if (parseFloat(myInput.val()) < 0.2 ) { 
 
     jQuery('.alert').hide(); 
 
     jQuery(this).focusout(function() { 
 
      jQuery(this).val('0,2'); 
 
     }) 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 

 
<input type="text"> 
 
<span class="alert">alert</span>

答えて

3

あなたは条件付きでfocusoutイベントを実行じゃない、あなたはそれを作成する条件付きです。作成されると、常に実行されます。

通常のようにイベントを作成しますが、イベント自体に条件を挿入します。イベントはと常にが実行されますが、そのロジックは条件に基づいて変更されます。このような何か:

jQuery('input[type=text]').on('input', function() { 
    jQuery(this).val(jQuery(this).val().replace(/,/g, '.')); 
    if (parseFloat(jQuery(this).val()) < 0.2 ) { 
     jQuery('.alert').hide(); 
    } 
}); 

jQuery('input[type=text]').focusout(function() { 
    if (parseFloat(jQuery(this).val()) < 0.2 ) { 
     jQuery(this).val('0,2'); 
    } 
}); 

注:私はここに意図された機能へと推測ほとんどです。しかし、アイデアそのものは簡単です。イベントを別々にしておき、イベントが、常にになると想定し、条件に応じてロジックごとにイベントに応答します。条件付きでイベント自体を起動しようとしないでください。

0

myInput.val()) < 0.2が少なくとも1回実行された場合に発生します。 focusoutイベントはメモリに残り、無条件に値を設定しています。次のコードは、あなたのコードを修正します:

jQuery('input[type=text]').on('input', function() { 
 
    var myInput = jQuery(this); 
 
    jQuery(this).val(jQuery(this).val().replace(/,/g, '.')); 
 
    if (parseFloat(myInput.val()) < 0.2 ) { 
 
     jQuery('.alert').hide(); 
 
     jQuery(this).focusout(function() { 
 
      parseFloat(jQuery(this).val()) < 0.2 && jQuery(this).val('0.2'); 
 
     }) 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 

 
<input type="text"> 
 
<span class="alert">alert</span>

+1

また、これはたびに新しい 'focusout'ハンドラに入力変更を添付します。ハンドラを他のハンドラの外側に取り付ける方がよいでしょう。 – David

関連する問題