javascript - 掩码货币不适用于动态添加的输入

标签 javascript php jquery

我正在使用jquery.maskMoney.js向输入添加掩码,它适用于正常输入。但它不适用于动态添加的输入。 这是我正在使用的代码

$(document).ready(function() {
    var max_fields      = 10; //maximum input boxes allowed
    var wrapper         = $(".input_fields_wrap"); //Fields wrapper
    var add_button      = $(".add_field_button"); //Add button ID
    var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ 
            x++; //text box increment
            $(wrapper).append('<div><input type="text" name="mytext[]" id="demo['+x+']" /><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });
    $('input[id^="demo"]').each(function () {
    $(this).maskMoney({prefix:'R$ ', thousands:'.', decimal:',', affixesStay: true}); 
});


<div class="input_fields_wrap">
  <button class="add_field_button">Add More Fields</button>
  <div><input type="text" name="mytext[]" id="demo[1]"></div>
</div>

请帮助我,我被困住了

最佳答案

你可以这样改变你的javascript。请参阅 initMaskMoney(),它在页面加载后和添加文本字段后都会调用。此外,您不需要迭代每个元素,您可以使用选择器一次选择所有元素。

<script type="text/javascript">
$(document).ready(function() {
     var max_fields      = 10; //maximum input boxes allowed
     var wrapper         = $(".input_fields_wrap"); //Fields wrapper
     var add_button      = $(".add_field_button"); //Add button ID
     var x = 1; //initlal text box count
     $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
         if(x < max_fields){ 
             x++; //text box increment
             $(wrapper).append('<div><input type="text" name="mytext[]" id="demo['+x+']" /><a href="#" class="remove_field">Remove</a></div>');
             //re-init mask money to apply new added input 
             initMaskMoney();
         }
    });
     initMaskMoney();

});

function initMaskMoney() {
    $('input[id^="demo"]').maskMoney({prefix:'R$ ', thousands:'.', decimal:',', affixesStay: true}); 
}

</script>

更新 看到@Dekel的回答后我认为这个版本更方便。 initMaskMoney 获取一个名为选择器的参数。借助此参数,您可以为当前项目和仅新添加的输入初始化 maskmoney(在前面的答案中,所有输入框都再次初始化 MaskMoney)。

<script type="text/javascript">
$(document).ready(function() {
     var max_fields      = 10; //maximum input boxes allowed
     var wrapper         = $(".input_fields_wrap"); //Fields wrapper
     var add_button      = $(".add_field_button"); //Add button ID
     var x = 1; //initlal text box count
     $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ 
             x++; //text box increment
             var newItem =  $('<div><input type="text" name="mytext[]" id="demo['+x+']" /><a href="#" class="remove_field">Remove</a></div>')
             $(wrapper).append(newItem); //add input box
             //init mask money for only added input
             initMaskMoney($(newItem).find('input'));
         }
    });

    //init mask money for current inputs
    initMaskMoney('input[id^="demo"]');

});

function initMaskMoney(selector) {
    $(selector).maskMoney({prefix:'R$ ', thousands:'.', decimal:',', affixesStay: true}); 
}

</script>

关于javascript - 掩码货币不适用于动态添加的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31426733/

相关文章:

javascript - 通过 Ajax 发送带有额外参数的表单数据?

c# - 如何在asp :BoundField?中将日期时间更改为本地GMT日期时间

javascript - 使用 angularjs 提交表单后显示警报

javascript - Rails - js 内的 Asset_path 可能带有变量吗?

php mysql 更新 blob

php - 如何在 PHP 7.4 中启用 opcache 预加载?

javascript - 从父函数访问重写的变量

javascript - Angular nvd3 折线图自动调整大小

javascript - 在 Qualtrics 中将键盘使用与答案随机化集成

php - 如何使用 jQuery 在表单上以红色字体显示错误消息?