加载或创建字段时,JQuery输入掩码失败

时间:2014-09-09 18:29:22

标签: javascript jquery ajax jquery-inputmask

我正在使用RobinHerbots / jquery.inputmask进行应用程序。

一切正常,除非加载或创建动态字段

<html>
...
<div> 
    <input class="datemask" value="31/01/2014" name="fechaPago[]" id="fechaPago[]" type="text">
</div>
//More ajax loaded fields

<h:commandLink action="#{someaction}">
    <f:ajax onevent="function(data) { configureMask() }"/>
    Click Here
</h:commandLink>

...
<script src="jquery-2.0.2.min.js"></script>
<script src="jquery.inputmask.js"></script>
<script src="jquery.inputmask.date.extensions.js"></script>

<script type="text/javascript">
    //<![CDATA[
    $(function() {
        configureMask();
    });
    function configureMask() {
        $(".datemask").inputmask("dd/mm/yyyy", {"placeholder": "dd/mm/yyyy"});
    }
    //]]>
</script>
...
</html>

执行操作时,仅加载新字段,成功回调尝试使用掩码配置所有字段,包括新字段,但以前的字段不起作用。以前的所有字段都是空的,不接受新值。

如何配置加载的字段而不影响以前的字段?

提前致谢

2 个答案:

答案 0 :(得分:2)

这对我的案例也有帮助:

$(".phone-input").inputmask();
$(document).on("ajaxComplete", function(e){
    $(".phone-input").inputmask();
});

答案 1 :(得分:1)

我不完全确定你要做什么,因为你没有说出你想要发生什么 - 但是让我们试一试。

每次点击您的链接时,都会调出configureMask功能。此函数选择DOM中的所有输入元素并初始化inputmask

每次点击此链接时,您是否打算重新初始化所有输入元素?初始化inputmask后,您无需执行任何其他操作,然后更新该值。如果您尝试初始化已经初始化的inputmask,则可能会出现问题。

如果需要,可以删除元素上的旧输入掩码,然后重新初始化它们,但这没有任何意义。

$(".datemask").inputmask('remove');

我觉得你要做的就是初始化注入元素的inputmask

...
<h:commandLink action="#{someaction}">
    <f:ajax onevent="function(data) { configureMask(this) }"/>
    Click Here
</h:commandLink>
...
function configureMask(element) {
    //if the element was passed in then select it, else select all 
    //elements that have not been processed
    var $elements = element ? $(element) : $(".datemask").not(".datemask-processed");
    $elements.inputmask("dd/mm/yyyy").addClass("datemask-processed");
}

由于您已经在使用jquery.inputmask.date.extensions.js库,因此您可以访问所有默认日期定义。您无需发送dd\mm\yyyy的占位符,因为它已经定义。

//snippet from the `jquery.inputmask.date.extensions.js` library
$.extend($.inputmask.defaults.aliases, { 
        'dd/mm/yyyy': { 
            mask: "1/2/y", 
            placeholder: "dd/mm/yyyy", 
...