16

I am trying to have one input on my page that I would like to have a U.S. phone number mask by default. If a end user clicks a checkbox specifing they would like to enter a International phone number I want the mask to be removed.

I have tried multiple ways and have been unsuccessful thus far. In the current project I am using jQuery to hide/show a completely different input. But I don't like that option and would like a more streamlined approach.

I am using the following:

jQuery 1.4.1 (going to upgrade to 1.4.2 soon) and jQuery.MaskedInput-1.2.2

<script type="text/javascript">
$(document).ready(function($) {
  if ($("#InternationalOfficePhone").attr('checked') == false) {
    $("#OfficePhone").mask("(999) 999-9999? x99999");
  }
});

$("#InternationalOfficePhone").click(function() {
  if ($("#InternationalOfficePhone").attr('checked') == true) {
    //$("#OfficePhone").mask(); //doesn't work
    //$("#OfficePhone").unmask(); //doesn't work
    $("#OfficePhone").unmask("(999) 999-9999? x99999"); //doesn't work
  } else {
    $("#OfficePhone").mask("(999) 999-9999? x99999");
  }
});
</script>

The code above works properly to set the default mask, but no matter what I try on the click event for the InternationalOfficePhone it doesn't remove the mask.

Any help is much appreciated.

Hadi
  • 31,125
  • 9
  • 49
  • 111
Terry Nederveld
  • 704
  • 1
  • 6
  • 14

7 Answers7

29

You don't need to pass a parameter to the unmask function! Use it without a parameter and it works well.

$("#OfficePhone").unmask();
Diego Mendes
  • 8,767
  • 1
  • 28
  • 35
  • Confirmed! Works without parameter. This should probably have been a comment though... – Chad Jul 07 '15 at 18:16
  • 6
    Why a comment if this is the answer to the question? – Diego Mendes Jul 30 '15 at 22:57
  • There was already an answered that used the `unmask` function, and your answer reads as if it is building upon that answer – Chad Jul 31 '15 at 13:39
  • 1
    off course not, the accepted answer is wrong. Terry use .unmask(parameter) and the right answer is .unmask(). This is why I put as a new answer, that time I couldn't edit others. – Diego Mendes Aug 07 '15 at 05:37
  • Accepted answer is not wrong, but the parameter is not necessary. It still works with the parameter. But I did upvote your answer because it is more correct, given this. – Chad Aug 07 '15 at 13:40
20

I was able to figure out the code to get it to work. Below is the code I am using now.

<script type="text/javascript">
$(function($) {
  $("#OfficePhone").mask("(999) 999-9999? x99999");
  $("#InternationalOfficePhone").click(function() {
    var mask = "(999) 999-9999? x99999";
    if ($("#InternationalOfficePhone").is(':checked')) {
      $("#OfficePhone").unmask(mask);
    } else {
      $("#OfficePhone").mask(mask);
    }
  });
});
</script>
Terry Nederveld
  • 704
  • 1
  • 6
  • 14
  • `.unmask()` works perfectly. All I needed, thanks. But as pointed out in Diego's answer, you do not need to pass a parameter to the function. – Chad Jul 07 '15 at 18:15
  • Does this still work with maskedInput 1.4.1? I'm finding that neither `.unmask()` nor `.unmask(maskString)` removes the functionality from the field nor the mask-inserted characters from the value. I had to call `.mask()` again (no arguments) to get the unmasked value, as suggested by [this answer below](https://stackoverflow.com/a/45075512/1279516) – jcairney Feb 26 '20 at 21:41
3

I run through the same problem, and what helped me is:

    var maskedInput = $("#id").data('mask');
    if (maskedInput) {
        maskedInput.remove();
    }
Agni
  • 370
  • 4
  • 14
2

Try using the :checked instead of attr check, I think that is the problem. I mean use $('#InternationalOfficePhone').is(':checked') in the if condition.

Teja Kantamneni
  • 16,851
  • 10
  • 54
  • 84
2

Remove the inputmask:

$(selector).inputmask('remove');

or

var input = document.getElementById(selector);
if (input.inputmask)
  input.inputmask.remove()

or

Inputmask.remove(document.getElementById(selector));
EngineerCoder
  • 1,373
  • 13
  • 26
2

I'm using jQuery Mask Plugin v1.14.12

In my case, the .unmask() wasn't working because I was using a different selector than the one used when the mask was first created.

For example, let's say this was the input:

<input type="text" class="someclass maskme" value="" name="somename" />

the mask was created like this:

$('.maskme').mask('0000');

then, I was trying to unmask it as follows, which wasn't working:

$('.someclass').unmask();

once I changed it to the following, it worked as expected:

$('.maskme').unmask();
zed
  • 2,106
  • 4
  • 23
  • 40
1

I am using query.maskedinput.js Version: 1.4.1

the unmasking is done by

$("input").blur(function() {
    $("#info").html("Unmasked value: " + $(this).mask());
});

example Masking is

$("#pannumber").mask("aaaaa 9999 a");

Unmasking

$("#pannumber").blur(function() { 
    var pannumber=  $(this).mask() ;
});
zed
  • 2,106
  • 4
  • 23
  • 40
user1526780
  • 61
  • 1
  • 8