我有此代码
.card {display: block;}
.card.testCard { display: none; }
,我想在输入为空时增加导入,而在输入值时减少。此输入由Blade指令生成,并添加一个名为data-denominacion的数据属性。对不起,我的英语,我的母语是西班牙语。
谢谢
答案 0 :(得分:0)
我认为您可以使用.on('input', function() {
使用input
会导致事件在与输入change
事件相反的任何输入元素(文本输入,删除,右键单击,粘贴等)发生更改时触发现在使用,仅在输入失去焦点且值已更改时才会触发。
您正在使用setTimeout()每秒调用一个函数,该函数随后将更改事件绑定到每个输入元素(再次,每秒,由于某种原因重新绑定事件?)。显然,这是资源的低效和冗余浪费,是不采取行动的一个很好的例子。
您可以尝试使用此代码吗?我将其设置为在页面上任何输入元素上的任何更改(使用'input'而不是'change')上触发,然后使用.attr()
检查该输入上是否存在数据元素。如果是这样,它将继续使用原始功能(chequear)的内容。
对于importeReal变量,仍然不确定是否要在此处使用,但是我使用data属性将原始值放在了隐藏的输入元素中(只是为了好玩,如果不起作用,可能需要使用值) 。在逻辑中,它采用输入值并乘以面额(如前所述),然后每次都从原始值中减去,因此它不只是像以前一样一遍又一遍地减去。如果输入为空,则您的代码正在尝试使用一个可能不存在的变量,超出范围,因此消除了这种情况,只需通过从隐藏的输入中获取数据即可将importeReal变量更改回原始值(因此将其放回加载页面时的原始值)。再说一次,我对要使用该逻辑做什么不很清楚,但是我做出了最好的猜测。让我知道您是否有任何问题。
<input type="hidden" id="ireal" data-impreal="0">
<script type="text/javascript">
importeReal = parseFloat({{$importe}});
(function($){
$(function(){ //document.ready
$("#ireal").data("impreal", importeReal);
$('input').on('input', function() {
if($(this).attr('data-denominacion')) {
var valorInput = parseFloat($(this).val());
var denominacion = parseFloat($(this).attr('data-denominacion'));
if (/\D/.test(valorInput) || /\s/.test(valorInput)) {
toastr.warning('Solo valores numericos, por favor');
$(this).addClass('active');
}
if(/\d/.test(valorInput)) {
var originalImporteReal = $("#ireal").data("impreal");
var denominacionXInputValue = valorInput * denominacion;
importeReal = originalImporteReal - denominacionXInputValue;
console.log(importeReal);
if(importeReal <= 0) {
toastr.warning('No puede poner mas denominaciones');
} else {
toastr.info('Actualmente tienes sin ingresar' + importeReal);
}
}
if(valorInput =='') {
importeReal = $("#ireal").data("impreal");
toastr.info('Actualmente tienes sin ingresar' + importeReal);
}
}
});
});
})(jQuery);