如何使用jQuery动态更改输入的内容

时间:2018-07-04 20:09:08

标签: javascript jquery

我有此代码

.card {display: block;}

.card.testCard { display: none; }

,我想在输入为空时增加导入,而在输入值时减少。此输入由Blade指令生成,并添加一个名为data-denominacion的数据属性。对不起,我的英语,我的母语是西班牙语。

谢谢

1 个答案:

答案 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);