2017-09-07 2 views
0

Ich möchte .focusout() nur auslösen, wenn myInput.val() < 0.2 jetzt es unbedingt ausgelöst wird. Ich frage mich, was ich falsch mache.Fire-Funktion, wenn der Eingabewert ist <0,2 in jQuery

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>

Antwort

3

Sie sind nicht bedingt die focusout Ereignis ausgeführt wird, sind Sie bedingt es zu schaffen. Sobald es erstellt wurde, wird es immer ausgeführt.

Erstellen Sie das Ereignis als normal, aber fügen Sie die Bedingung in das Ereignis selbst ein. Das Ereignis wird immer ausführen, aber die Logik darin wird basierend auf der Bedingung ändern. Etwas wie folgt aus:

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'); 
    } 
}); 

Hinweis: Ich bin meist in Bezug auf die beabsichtigte Funktionalität zu raten hier. Aber die Idee selbst ist einfach genug. Halten Sie die Ereignisse getrennt, gehen Sie davon aus, dass die Ereignisse immer ausgelöst werden und auf diese Ereignisse entsprechend Ihrer Logik reagieren. Versuchen Sie nicht, die Ereignisse selbst bedingt auszulösen.

0

Dies geschieht, wenn myInput.val()) < 0.2 mindestens einmal erfüllt ist. Das Ereignis focusout bleibt im Speicher und dort setzen Sie den Wert unbedingt. Folgender Code wird Ihren Code beheben:

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

Dies wird auch einen neuen 'focusout' Handler jedesmal, wenn die Eingänge Änderungen anbringen. Besser, den Handler außerhalb anderer Handler anzuhängen. – David

Verwandte Themen