Is it possible mask input using a different placeholder?

Antonio Carlos Ribeiro picture Antonio Carlos Ribeiro · Feb 5, 2014 · Viewed 8.2k times · Source

Since my form has no labels, I would like to be able to use a different placeholder with Angular and Angular-UI-Utils-Mask:

<div ng-controller="myController">
    <input type="text"
        ng-model="date"
        ui-mask="99/99/9999"
        placeholder="Birth Date"/>  
</div>

Using jquery-inputmask it works like a charm, but I had too many problems to make it work with Angular so I'm now trying to go Angular way, but Angular shows my input as:

Bi/th/Date

Here's a fiddle to show it: http://jsfiddle.net/XS4R6/

I also saw some people talking about ´ui-mask-placeholder´, but it does nothing.

Is there a way to accomplish this?

EDIT

To clarify, I think it's just fine to use just placeholders since you also use titles (hint) so people always know what are they supposed to type in those inputs:

enter image description here

The input showing __.___.___ is the one I'm using Angular UI Mask.

JQuery Inputmask works very fine, since it shows the 'name' placeholder and as soon as I mouse over or click the input it shows the mask.

Answer

PinkyJie picture PinkyJie · Jul 17, 2014

I'm thinking you can use another tag to simulate placeholder, maybe the code here is not very good, but I just provide another thought.

app.directive("myPlaceholder", ['$compile', function($compile){
return {
    restrict: 'A',
    link: function(scope, elem, attr) {
        attr.$observe('myPlaceholder', initialize);
        var mask = '__/__/____';

        function initialize(value) {
            // label is not clickable in IE, that's the reason why we use span tag
            var fakePlaceholder = angular.element('<span class="placeholder">' + value + '</span>');
            // click placeholder to focus the input
            fakePlaceholder.on('click', function(){
                elem.focus();
            });
            elem.before(fakePlaceholder);
            $compile(fakePlaceholder)(scope);

            elem.on('focus', function() {
                fakePlaceholder.hide();
            }).on('blur', function() {
                if (elem.val() === mask) {
                    fakePlaceholder.show();
                }
            });
        }
    }
};
}]);

demo on http://jsfiddle.net/XS4R6/19/ (jQuery required)