#javascript #html
Вопрос:
У меня есть следующая форма, в которой я автоматически добавляю входные данные с помощью функции в js, подобной этой:
$('.Preco1').maskMoney({ decimal: '.', thousands: ' ', precision: 2 });
$('.Preco1').focus();
$('#sub').maskMoney({ decimal: '.', thousands: ' ', precision: 2, suffix: ' € ' });
$(".soma4, .soma5, .soma20").blur(function(){
var total1 = 0;
var total = 0;
var total2 = 0;
var selector = $(this)
selector.closest(".test").find(".soma4").each(function(){
total1 = total1 Number($(this).val().replace(/s/g, ''));
});
selector.closest(".test").find(".soma5").each(function(){
total = total Number($(this).val().replace(/s/g, ''));
});
selector.closest(".test").find(".soma20").each(function(){
total2 = total2 Number($(this).val().replace(/s/g, ''));
});
total3 = total * total1;
total4 = total2 / 100;
total5 = total3 * total4;
total6 = total3 - total5;
selector.closest(".test").find(".sub3").val(total6.toFixed(2));
var total3 = 0;
$(".soma").each(function(){
total3 = total3 Number($(this).val().replace(/s/g, ''));
});
$("#sub").val(total3.toFixed(2));
$('#sub').focus();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-maskmoney/3.0.2/jquery.maskMoney.min.js"></script>
<form role="form" class="limp5">
<div class="test">
<div class="form-group col-md-1">
<input type="text" class="form-control1 Preco1 alinha soma4" name="Qttd" id="Qttd" required>
<span class="form-highlight"></span>
<span class="form-bar"></span>
<label class="label3" for="Qttd">Quantidade</label>
</div>
<div class="form-group col-md-1" style="width: 11.099999995%; flex: 0 0 11.099%;max-width: 11.099%;">
<input type="text" class="form-control1 Preco1 alinha soma5" name="Uniit" id="Uniit" required>
<span class="form-highlight">€</span>
<span class="form-bar"></span>
<label class="label3" for="Uniit">Preço Unitário</label> </div>
<div class="form-group col-md-1">
<input type="text" class="form-control1 soma alinha sub3" name="Vallor" id="Vallor" required>
<span class="form-highlight">€</span>
<span class="form-bar"></span>
<label class="label3" for="Vallor">Total</label>
</div>
</div>
<div class="row fixarfundo">
<div class="form-group col-md-12" >
<input type="text" class="form-control alinha" name="sub" id="sub">
<span class="form-highlight"></span>
<span class="form-bar"></span>
<label class="label3" for="sub">Total</label>
</div>
</div>
</form>
Проблема в том , что при использовании этой строки внутри функции в js $('#sub').focus();
всякий раз, когда я хочу нажать на следующий ввод, я должен дважды щелкнуть на том же вводе, чтобы иметь возможность записывать на этот ввод. Следует принимать входные данные всего одним щелчком мыши
Комментарии:
1. Можете ли вы прояснить проблему? Почему вы фокусируете этот элемент, если не хотите, чтобы этот элемент был сфокусирован? Почему бы просто не удалить ту единственную «проблемную линию», которую вы определили, если вы не хотите, чтобы это произошло?
2. @David Я фокусируюсь на элементе, потому что хочу, чтобы у элемента всегда был символ евро, и если я не сфокусируюсь, этого не произойдет.
Ответ №1:
Вам не нужно фокусировать его, чтобы получить символ евро. Просто приступайте symbolStay
true
. Затем установите значение следующим образом:
$('#sub').maskMoney({ symbolStay: true, decimal: '.', thousands: ' ', precision: 2, suffix: ' € ' });
$("#sub").maskMoney('mask', value * 100);
(Я не знаю, почему вы должны умножать это на 100, но вы это делаете)
Зацени это:
$('.Preco1').maskMoney({ decimal: '.', thousands: ' ', precision: 2 });
$('.Preco1').focus();
$('#sub').maskMoney({ symbolStay: true, decimal: '.', thousands: ' ', precision: 2, suffix: ' € ' });
$(".soma4, .soma5, .soma20").blur(function(){
var total1 = 0;
var total = 0;
var total2 = 0;
var selector = $(this)
selector.closest(".test").find(".soma4").each(function(){
total1 = total1 Number($(this).val().replace(/s/g, ''));
});
selector.closest(".test").find(".soma5").each(function(){
total = total Number($(this).val().replace(/s/g, ''));
});
selector.closest(".test").find(".soma20").each(function(){
total2 = total2 Number($(this).val().replace(/s/g, ''));
});
total3 = total * total1;
total4 = total2 / 100;
total5 = total3 * total4;
total6 = total3 - total5;
selector.closest(".test").find(".sub3").val(total6.toFixed(2));
var total3 = 0;
$(".soma").each(function(){
total3 = total3 Number($(this).val().replace(/s/g, ''));
});
$("#sub").maskMoney('mask',total6 * 100);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-maskmoney/3.0.2/jquery.maskMoney.min.js"></script>
<form role="form" class="limp5">
<div class="test">
<div class="form-group col-md-1">
<input type="text" class="form-control1 Preco1 alinha soma4" name="Qttd" id="Qttd" required>
<span class="form-highlight"></span>
<span class="form-bar"></span>
<label class="label3" for="Qttd">Quantidade</label>
</div>
<div class="form-group col-md-1" style="width: 11.099999995%; flex: 0 0 11.099%;max-width: 11.099%;">
<input type="text" class="form-control1 Preco1 alinha soma5" name="Uniit" id="Uniit" required>
<span class="form-highlight">€</span>
<span class="form-bar"></span>
<label class="label3" for="Uniit">Preço Unitário</label> </div>
<div class="form-group col-md-1">
<input type="text" class="form-control1 soma alinha sub3" name="Vallor" id="Vallor" required>
<span class="form-highlight">€</span>
<span class="form-bar"></span>
<label class="label3" for="Vallor">Total</label>
</div>
</div>
<div class="row fixarfundo">
<div class="form-group col-md-12" >
<input type="text" class="form-control alinha" name="sub" id="sub">
<span class="form-highlight"></span>
<span class="form-bar"></span>
<label class="label3" for="sub">Total</label>
</div>
</div>
</form>