0

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>

アクションが実行されると、新しいフィールドのみが読み込まれ、成功のコールバックは新しいフィールドを含むすべてのフィールドをマスクで構成しようとしますが、以前のフィールドは機能しません。以前のフィールドはすべて空で、新しい値を受け入れません。

以前のフィールドに影響を与えることなく、ロードされたフィールドを構成するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

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", 
...
于 2014-09-14T17:00:42.883 に答える