2012-07-24 23 views
27

मुझे jQuery और Masked Input Plugin के साथ एक फ़ोन इनपुट मास्क करने में समस्या है।jQuery और मास्क किए गए इनपुट प्लगइन के साथ फोन मास्क

  1. (XX)XXXX-XXXX
  2. (XX)XXXXX-XXXX

इसमें दोनों ही मामलों को स्वीकार मुखौटा किसी भी तरह से है:

वहाँ 2 संभव स्वरूप हैं?

संपादित करें:

मैंने कोशिश की:

$("#phone").mask("(99) 9999-9999"); 
$("#telf1").mask("(99) 9999*-9999");  
$("#telf1").mask("(99) 9999?-9999"); 

लेकिन यह नहीं है काम करता है के रूप में मैं चाहूँगा।

निकटतम एक (xx) xxxx-xxxxx था।

जब मैं 11 वां टाइप करता हूं तो मैं xxx-xxxx (xx) xxxx-xxxx प्राप्त करना चाहता हूं, और (xx) xxxxx-xxxx प्राप्त करना चाहता हूं। क्या यह सकारात्मक है?

+2

JHispa: कृपया बजाय एक टिप्पणी – Andre

+1

http://jsfiddle.net/dKRGE/ के रूप में कोड जोड़ने के बाद, आपका जवाब संपादित –

+0

@JHispa आप किस प्लग-इन का उपयोग कर रहे हैं? –

उत्तर

48

इस प्रयास करें - http://jsfiddle.net/dKRGE/3/

$("#phone").mask("(99) 9999?9-9999"); 

$("#phone").on("blur", function() { 
    var last = $(this).val().substr($(this).val().indexOf("-") + 1); 

    if(last.length == 3) { 
     var move = $(this).val().substr($(this).val().indexOf("-") - 1, 1); 
     var lastfour = move + last; 
     var first = $(this).val().substr(0, 9); 

     $(this).val(first + '-' + lastfour); 
    } 
}); 
+0

आज़माएं, हाँ, यह ठीक हो सकता है! धन्यवाद! – JHispa

+0

क्या यह वास्तव में काम करता है? –

+0

@ ऑस्करजारा आप अपने प्रयास के लिए JSFiddle –

4

वास्तव में सही जवाब http://jsfiddle.net/HDakN/

ज़ोल्टन जवाब पर है उपयोगकर्ता प्रवेश की अनुमति देगा "(99) 9999" और फिर क्षेत्र अधूरा छोड़

$("#phone").mask("(99) 9999-9999?9"); 


$("#phone").on("blur", function() { 
    var last = $(this).val().substr($(this).val().indexOf("-") + 1); 

    if(last.length == 5) { 
     var move = $(this).val().substr($(this).val().indexOf("-") + 1, 1); 

     var lastfour = last.substr(1,4); 

     var first = $(this).val().substr(0, 9); 

     $(this).val(first + move + '-' + lastfour); 
    } 
});​ 
2

jQuery मास्क प्लगइन का उपयोग करके इसे लागू करने के दो संभावित तरीके हैं:

1- बाद Anatel के recomendations: https://gist.github.com/3724610/5003f97804ea1e62a3182e21c3b0d3ae3b657dd9

2- या Anatel के recomendations निम्नलिखित के बिना: https://gist.github.com/igorescobar/5327820

सभी उपरोक्त उदाहरण jQuery मास्क प्लगइन और इसे डाउनलोड किया जा सकता का उपयोग कर कोडित किया गया था: http://igorescobar.github.io/jQuery-Mask-Plugin/

1
var $phone = $("#input_id"); 
var maskOptions = {onKeyPress: function(phone) { 
    var masks = ['(00) 0000-0000', '(00) 00000-0000']; 
    mask = phone.match(/^\([0-9]{2}\) 9/g) 
     ? masks[1] 
     : masks[0]; 
    $phone.mask(mask, this); 
}}; 
$phone.mask('(00) 0000-0000', maskOptions); 
1

jquery.mask के साथ।js

http://jsfiddle.net/brynner/f9kd0aes/

एचटीएमएल

<input type="text" class="phone" maxlength="15" value="85999998888"> 
<input type="text" class="phone" maxlength="15" value="8533334444"> 

जे एस

// Function 
function phoneMask(e){ 
    var s=e.val(); 
    var s=s.replace(/[_\W]+/g,''); 
    var n=s.length; 
    if(n<11){var m='(00) 0000-00000';}else{var m='(00) 00000-00000';} 
    $(e).mask(m); 
} 

// Type 
$('body').on('keyup','.phone',function(){ 
    phoneMask($(this)); 
}); 

// On load 
$('.phone').keyup(); 

केवल jQuery

http://jsfiddle.net/brynner/6vbrqe6z/

एचटीएमएल

<p class="phone">85999998888</p> 
<p class="phone">8599998888</p> 

jQuery

$('.phone').text(function(i, text) { 
    var n = (text.length)-6; 
    if(n==4){var p=n;}else{var p=5;} 
    var regex = new RegExp('(\\d{2})(\\d{'+p+'})(\\d{4})'); 
    var text = text.replace(regex, "($1) $2-$3"); 
    return text; 
}); 
12

यहाँ एक jQuery फोन नंबर मुखौटा है। कोई प्लगइन की आवश्यकता नहीं है। प्रारूप आपकी आवश्यकताओं के लिए समायोजित किया जा सकता है।

Updated JSFiddle

एचटीएमएल

<form id="example-form" name="my-form"> 
    <input id="phone-number" name="phone-number" type="text" placeholder="(XXX) XXX-XXXX"> 
</form> 

जावास्क्रिप्ट

$('#phone-number', '#example-form') 

.keydown(function (e) { 
    var key = e.which || e.charCode || e.keyCode || 0; 
    $phone = $(this); 

    // Don't let them remove the starting '(' 
    if ($phone.val().length === 1 && (key === 8 || key === 46)) { 
     $phone.val('('); 
     return false; 
    } 
    // Reset if they highlight and type over first char. 
    else if ($phone.val().charAt(0) !== '(') { 
     $phone.val('('+$phone.val()); 
    } 

    // Auto-format- do not expose the mask as the user begins to type 
    if (key !== 8 && key !== 9) { 
     if ($phone.val().length === 4) { 
      $phone.val($phone.val() + ')'); 
     } 
     if ($phone.val().length === 5) { 
      $phone.val($phone.val() + ' '); 
     }   
     if ($phone.val().length === 9) { 
      $phone.val($phone.val() + '-'); 
     } 
    } 

    // Allow numeric (and tab, backspace, delete) keys only 
    return (key == 8 || 
      key == 9 || 
      key == 46 || 
      (key >= 48 && key <= 57) || 
      (key >= 96 && key <= 105)); 
}) 

.bind('focus click', function() { 
    $phone = $(this); 

    if ($phone.val().length === 0) { 
     $phone.val('('); 
    } 
    else { 
     var val = $phone.val(); 
     $phone.val('').val(val); // Ensure cursor remains at the end 
    } 
}) 

.blur(function() { 
    $phone = $(this); 

    if ($phone.val() === '(') { 
     $phone.val(''); 
    } 
}); 
+0

यह खाता नहीं है कि उपयोगकर्ता इनपुट की शुरुआत के लिए सभी तरह से बैकस्पेस करता है। यह उपयोगकर्ता को पूरी चीज़ का चयन करने के लिए cmd + a या ctrl + a को अनुमति नहीं देता है (इसे हटाने या कॉपी करने के लिए) –

+0

अपडेट किया गया कोड और फीडल ताकि सभी तरह से बैकस्पेसिंग को अस्वीकार कर दिया जा सके। – Justin

+0

अपडेट किया गया JSFiddle IE 11 के साथ काम नहीं करता है :( – Cooleshwar

0

यह करने के लिए सबसे अच्छा तरीका है परिवर्तन घटना इस तरह उपयोग कर रहा है:

$("#phone") 
.mask("(99) 9999?9-9999") 
.on("change", function() { 

    var last = $(this).val().substr($(this).val().indexOf("-") + 1); 

    if(last.length == 3) { 
     var move = $(this).val().substr($(this).val().indexOf("-") - 1, 1); 
     var lastfour = move + last; 
     var first = $(this).val().substr(0, 9); // Change 9 to 8 if you prefer mask without space: (99)9999?9-9999 

     $(this).val(first + '-' + lastfour); 
    } 
}) 
.change(); // Trigger the event change to adjust the mask when the value comes setted. Useful on edit forms. 
3

आप के लिए एक jQuery प्लगइन की आवश्यकता मुखौटा भी काम करता है।

- एचटीएमएल -

<input type="text" id="phone" placeholder="(99) 9999-9999"> 
<input type="text" id="telf1" placeholder="(99) 9999*-9999"> 
<input type="text" id="telf2" placeholder="(99) 9999?-9999"> 

- JAVASCRIPT -

<script src="https://raw.githubusercontent.com/igorescobar/jQuery-Mask-Plugin/master/src/jquery.mask.js"></script> 
<script> 
$(document).ready(function($){ 
    $("#phone").mask("(99) 9999-9999"); 
    $("#telf1").mask("(99) 9999*-9999");  
    $("#telf2").mask("(99) 9999?-9999"); 
}); 
</script> 
0

सबसे अच्छा कलंक पर यह करने के लिए तरीका है:

     function formatPhone(obj) { 
         if (obj.value != "") 
         { 
          var numbers = obj.value.replace(/\D/g, ''), 
          char = {0:'(',3:') ',6:' - '}; 
          obj.value = ''; 
          upto = numbers.length; 

          if(numbers.length < 10) 
          { 
           upto = numbers.length; 
          } 
          else 
          { 
           upto = 10; 
          } 
          for (var i = 0; i < upto; i++) { 
           obj.value += (char[i]||'') + numbers[i]; 
          } 
         } 
        } 
2

आप उपयोग कर सकते हैं इनपुटमास्क v3

012 के साथ फोन उपनाम

$(function() { 
 
    $('input[type="tel"]').inputmask({ alias: "phone", "clearIncomplete": true }); 
 
});
<label for="phone">Phone</label> 
 
    <input name="phone" type="tel"> 
 

 
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/inputmask.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/inputmask.extensions.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/inputmask.numeric.extensions.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/inputmask.date.extensions.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/inputmask.phone.extensions.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/jquery.inputmask.js"></script> 
 
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/[email protected]/dist/inputmask/phone-codes/phone.js"></script>

https://github.com/RobinHerbots/Inputmask#aliases

0

As alternative

function FormatPhone(tt,e){ 
    //console.log(e.which); 
    var t = $(tt); 
    var v1 = t.val(); 
    var k = e.which; 
    if(k!=8 && v1.length===18){ 
    e.preventDefault(); 
    } 
    var q = String.fromCharCode((96 <= k && k <= 105)? k-48 : k); 
    if (((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) && e.keyCode!=46 && e.keyCode!=37 && e.keyCode!=8 && e.keyCode!=39) { 
e.preventDefault(); 
    } 
    else{ 
    setTimeout(function(){ 
     var v = t.val(); 
     var l = v.length; 
     //console.log(l); 
     if(k!=8){ 
     if(l<4){ 
      t.val('+7 '); 
     } 
     else if(l===4){ 
      if(isNaN(q)){ 
      t.val('+7 ('); 
      } 
      else{ 
      t.val('+7 ('+q); 
      } 
     } 
     else if(l===7){ 
      t.val(v+')'); 
     } 
     else if(l===9){ 
      t.val(v1+' '+q); 
     } 
     else if(l===13||l===16){ 
      t.val(v1+'-'+q); 
     } 
     else if(l>18){ 
      v=v.substr(0,18); 
      t.val(v); 
     } 
     } 
     else{ 
      if(l<4){ 
      t.val('+7 '); 
      } 
     } 
    },100); 
    } 
} 
संबंधित मुद्दे