我只有在.focusout()
现在无条件解雇时才会发起myInput.val() < 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>
答案 0 :(得分: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');
}
});
注意:我主要是猜测这里的预期功能。但这个想法本身很简单。保持事件分离,假设事件将始终触发,并根据您的逻辑有条件地响应这些事件。不要试图自己有条不紊地发射事件。
答案 1 :(得分:0)
当myInput.val()) < 0.2
至少履行一次时会发生这种情况。 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>