SitePoint Sponsor

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 25 of 31
  1. #1
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Cannot change input field type in IE 8

    Hi Guys,
    I'm working on masking some input fields, for the credit card field requirement is that characters should be masked while you are typing in the field and also on focus out. So ofcourse I achieved that easily by converting the field to type password. But the next requirement is that when the user clicks back in the field (focus), it should should show the value but as soon as the user starts typing, the value should be masked. I've tried all sorts of things but I was finally stuck because of IE 8 , as it won't let me change the type. Does anyone have a solution that will work in all browsers including IE 8?

    Thank you!

  2. #2
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Hi,

    This would be how I would do it.

    Does that work on IE8?
    I don't have IE installed, so can't test.

    Code:
    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Show password field on focus</title>
      </head>
    
      <body>
        <input id="maskedField" data-value="" type="password"/>
    
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
          function checkType(field){
            if(field.attr("type") === "text"){
              field.attr("type", "password");
            }
          }
    
          $("#maskedField").on("focus", function(){
            $(this).attr("type", "text");
            $(this).val($(this).data("value"));
          })
    
          $("#maskedField").on("blur", function(){
            $(this).attr("type", "password");
          });
    
          $("#maskedField").keyup(function(e) {
            checkType($(this));
            $(this).data("value", this.value);
          });
        </script>
      </body>
    </html>

  3. #3
    SitePoint Member
    Join Date
    Jan 2014
    Posts
    9
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    if you can't change the type just change the whole input field
    http://jsfiddle.net/psUe4/12/
    Code:
    (function() {
        var keyup = false;
        $('form').on('blur', 'input[type=text]', function() {
            var $this = $(this),
                val = $this.val(),
                $pass = $('<input class="pwd" type="password" />');
            $pass.insertAfter(this);
            $this.remove();
            if (keyup) $pass.focus();
            keyup = false;
            $pass.val(val).addClass('ready');
        }).on('keyup', 'input[type=text]', function() {
            keyup = true;
            $(this).blur();
        }).on('focus', 'input[type=password].ready', function() {
            var $this = $(this),
                val = $this.val(),
                $txt = $('<input type="text" />');
            $txt.insertAfter(this);
            $this.remove();
            $txt.focus().val(val);
        });
    })();
    you will obviously need some more precise fields targeting and probably ignore some keyCodes on the keyup

  4. #4
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    jScript (IE8 and earlier) doesn't allow you to change the type of an input after you create it.

    As you are already using jQuery the jQuery solution already provided is the simplest solution.

    For anyone who has this problem who isn't using jQuery see http://javascriptexample.net/domform08.php for how to do it with plain J(ava)Script (JScript for IE8 and earlier and JavaScript for modern browsers)
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  5. #5
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Thanks for your replies, this didn't work in IE8, I'm also using an older version of jQuery 1.4.2, right now I don't have the flexibility to update it for the application. So sorry guys but none of the above have worked for me so far

  6. #6
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by fazthegreat View Post
    Thanks for your replies, this didn't work in IE8, I'm also using an older version of jQuery 1.4.2, right now
    So replace the .on() calls with deprecated .delegate() calls instead as that's what older versions of jQuery used that .on() replaced in version 1.7
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  7. #7
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Pullo View Post
    Hi,

    This would be how I would do it.

    Does that work on IE8?
    I don't have IE installed, so can't test.

    Code:
    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Show password field on focus</title>
      </head>
    
      <body>
        <input id="maskedField" data-value="" type="password"/>
    
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script>
          function checkType(field){
            if(field.attr("type") === "text"){
              field.attr("type", "password");
            }
          }
    
          $("#maskedField").on("focus", function(){
            $(this).attr("type", "text");
            $(this).val($(this).data("value"));
          })
    
          $("#maskedField").on("blur", function(){
            $(this).attr("type", "password");
          });
    
          $("#maskedField").keyup(function(e) {
            checkType($(this));
            $(this).data("value", this.value);
          });
        </script>
      </body>
    </html>
    I like this solution, is it possible this can be modified to work in IE8 and jQuery 1.4.2 ?

  8. #8
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by davidfregoli View Post
    if you can't change the type just change the whole input field
    http://jsfiddle.net/psUe4/12/
    Code:
    (function() {
        var keyup = false;
        $('form').on('blur', 'input[type=text]', function() {
            var $this = $(this),
                val = $this.val(),
                $pass = $('<input class="pwd" type="password" />');
            $pass.insertAfter(this);
            $this.remove();
            if (keyup) $pass.focus();
            keyup = false;
            $pass.val(val).addClass('ready');
        }).on('keyup', 'input[type=text]', function() {
            keyup = true;
            $(this).blur();
        }).on('focus', 'input[type=password].ready', function() {
            var $this = $(this),
                val = $this.val(),
                $txt = $('<input type="text" />');
            $txt.insertAfter(this);
            $this.remove();
            $txt.focus().val(val);
        });
    })();
    you will obviously need some more precise fields targeting and probably ignore some keyCodes on the keyup
    This works perfect in chrome and firefox but I cannot get it to work with IE8 with jQuery 1.4.2

  9. #9
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    .on() was introduced in jQuery 1.7 as a replacement for .delegate() so with 1.4 you have to use ,delegate() instead.
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  10. #10
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Thanks for all your help so far guys, if the above is true then below should work, but it doesn't . I have not even checked this in IE yet, only tested in chrome and it's not working. So what do you think I'm missing? There are no errors in the console but just absolutely nothing happens when I type in the filed, it just acts as text field.

    Code:
        var keyup = false;
        $('form').delegate('blur', 'input[type=text]', function() {
            var $this = $(this),
                val = $this.val(),
                $pass = $('<input class="pwd" type="password" />');
            $pass.insertAfter(this);
            $this.remove();
            if (keyup) $pass.focus();
            keyup = false;
            $pass.val(val).addClass('ready');
        }).delegate('keyup', 'input[type=text]', function() {
            keyup = true;
            $(this).blur();
        }).delegate('focus', 'input[type=password].ready', function() {
            var $this = $(this),
                val = $this.val(),
                $txt = $('<input type="text" />');
            $txt.insertAfter(this);
            $this.remove();
            $txt.focus().val(val);
        });
    })();

  11. #11
    SitePoint Member
    Join Date
    Jan 2014
    Posts
    9
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    you also need to switch the first two arguments http://jsfiddle.net/psUe4/18/

  12. #12
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Hi there,

    Working off of davidfregoli's clever solution, you could do this in plain JS:

    Code:
    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Show password field on focus</title>
        <style>
          label{ 
            display: block;
            margin: 8px;
            text-align:right;
            width: 250px;
          }
        </style>
      </head>
    
      <body>
        <form>
          <label>Masked: <input type="text" class="masked" /></label>
          <label>Not Masked: <input type="text" /></label>
          <label>Masked: <input type="text" class="masked" /></label>
        </form>
    
        <script>
          function bindEventListeners(field){
            field.addEventListener("focus", function(){
              reveal(this);
            }, false);
    
            field.addEventListener("keypress", function(){
              conceal(this);
            }, false);
    
            field.addEventListener("blur", function(){
                mask(this);
            }, false);
          }
    
          function createInput(type, initialValue){
            var inputElement = document.createElement("input");
            inputElement.type = type;
            inputElement.value = initialValue;
    
            return inputElement;
          }
    
          function mask(field){
            if (field.getAttribute("data-destroy") != "true"){
              var passwordField = createInput("password", field.value);
              bindEventListeners(passwordField);
              field.parentNode.replaceChild(passwordField, field);
            }
          }
    
          function conceal(field){
            if(field.type === "text"){
              var passwordField = createInput("password", field.value);
              field.setAttribute("data-destroy", "true");
              field.parentNode.replaceChild(passwordField, field);
              passwordField.focus();
              bindEventListeners(passwordField);
            }
          }
    
          function reveal(field){
            var textField = createInput("text", field.value);
            field.setAttribute("data-destroy", "true");
            field.parentNode.replaceChild(textField, field);
            textField.focus();
            bindEventListeners(textField);
          }
    
          var maskedFields = document.querySelectorAll('.masked');
          for(var i = 0, len = maskedFields.length; i < len; i++){
            bindEventListeners(maskedFields[i]);
          }
        </script>
      </body>
    </html>
    Here's a demo.

  13. #13
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Oh noes!

    I just got hold of a copy of IE8 to test on and my demo is rather broken

    I couldn't test David's version as JSFiddle is equally as broken in IE8, but I'm sure that'll be what you're looking for.

    If for some reason it doesn't work, I'm sure I could debug mine.

  14. #14
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Pullo View Post
    Oh noes!

    I just got hold of a copy of IE8 to test on and my demo is rather broken

    I couldn't test David's version as JSFiddle is equally as broken in IE8, but I'm sure that'll be what you're looking for.

    If for some reason it doesn't work, I'm sure I could debug mine.
    Yes, your solution does not work in IE, don't think it even does in IE9, haven't checked 10 or 11.
    I'm not sure what is wrong but I cannot get delegate to work, simple piece of code as below won't even work. Nothing triggers, I'm not sure what is going on, possible you can check David's solution on your Machine now that you have IE8? Appreciate the help!
    Code:
    $(document).ready(function(){
    var keyup = false;
    $('form').delegate('click', 'input[type=text]', function(){
    		alert('test');
    });

  15. #15
    SitePoint Member
    Join Date
    Jan 2014
    Posts
    9
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by davidfregoli View Post
    you also need to switch the first two arguments

  16. #16
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by Pullo View Post
    Working off of davidfregoli's clever solution, you could do this in plain JS:
    IE8 only runs JScript ands so only supports attachEvent and not addEventListener.

    I already posted a link to a plain JavaScript version that does work even in IE5 back in post 4 of this thread.


    JScript does not support changing the type attribute. It does support conditional comments so that you can use those to readily distinguish between browsers that run JavaScript and those that run JScript (IE9 slightly complicates things by supporting both).
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  17. #17
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by davidfregoli View Post
    omg sorry I thought I had copy/pasted the new code you provided but I was still using the old code. Now that I have the code updated it is somewhat working in IE 8, sometimes it has a weird behavior, the cursor jumps one character behind while you are typing, so messing up the input. In IE 9, it does not switch to password type at all while you are typing and also the cursor jumps back one character every time a character is typed in. I feel we're almost there! I'll keep looking into it, let me know if you any suggestions for this.

  18. #18
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Hi felgall,

    Quote Originally Posted by felgall View Post
    IE8 only runs JScript ands so only supports attachEvent and not addEventListener.
    Yeah, sorry, I used a pollyfill for this. I don't this wasn't the problem (although anything is possible).

    Quote Originally Posted by felgall View Post
    I already posted a link to a plain JavaScript version that does work even in IE5 back in post 4 of this thread.
    About that, I couldn't get it to work on the latest Chrome on Linux.
    I copied the source code verbatim from your page, but I get the following error when I try and run it:

    Code:
    Uncaught SyntaxError: Unexpected token ; temp.html:61
    It seems you've missed the closing bracket of the IFFE, i.e.

    Code:
    (function() { ... }();
    should be:

    Code:
    (function() { ... })();
    but although adding that makes the error go away, then nothing happens at all when I click into the input field - it is just plain text.

    My code:

    Code:
    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>MAske password</title>
      </head>
    
      <body>
        <input type="password" name="pass" id="pass">
    
        <script>
          if (window.addEventListener)
          addEvent = function(ob, type, fn ) {
          ob.addEventListener(type, fn, false );
          };
          else if (document.attachEvent)
          addEvent = function(ob, type, fn ) {
          var eProp = type + fn;
          ob['e'+eProp] = fn;
          ob[eProp] = function(){ob['e'+eProp]( window.event );};
          ob.attachEvent( 'on'+type, o[eProp]);
          };
           
          (function() {
          var p = document.getElementById('pass');
          /*@cc_on
            @if (@_jscript)
            @if (@_jscript_version < 9)
            var inp = document.createElement("<input name='pass'>");
            inp.id = 'pass1';
            inp.type = 'text';
            inp.value = 'password';
            p.parentNode.replaceChild(inp,p);
            p = document.getElementById('pass1');
            @else
            p.type = 'text';
            p.value = 'password';
            @end
          @else */
            p.type = 'text';
            p.value = 'password';
          /* @end @*/
          passFocus = function() {
          if ('text' === this.type) {
            /*@cc_on
              @if (@_jscript)
            var inp = document.createElement("<input name='pass'>");
              inp.id = 'pass';
              inp.type = 'password';
              inp.value = '';
              this.parentNode.replaceChild(inp,this);
              inp.focus();
            @else */
              this.value = '';
              this.type = 'password';
              this.focus();
            /* @end @*/
          }
          addEvent(p, 'focus', passFocus);
          }
          }();
        </script>
      </body>
    </html>

  19. #19
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Quote Originally Posted by fazthegreat View Post
    Yes, your solution does not work in IE, don't think it even does in IE9, haven't checked 10 or 11.
    Yeah, it utterly fails in IE, which was kind of disappointing.

    Did you get David or felgall's solution working?

  20. #20
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    There were two typos in my code - a missing ) and a } in the wrong place - now fixed.
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  21. #21
    SitePoint Enthusiast
    Join Date
    Apr 2009
    Location
    FL
    Posts
    33
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Pullo View Post
    Yeah, it utterly fails in IE, which was kind of disappointing.

    Did you get David or felgall's solution working?
    Yes it's working in regards to using jQuery 1.4.2 but still not working well in IE, totally fails in IE 9 and there is a minor bug in IE 8, surprisingly works better in IE8 and even IE 7 than it does in IE 9. See my comment above I left on David's reply.

  22. #22
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by fazthegreat View Post
    totally fails in IE 9 and there is a minor bug in IE 8, surprisingly works better in IE8 and even IE 7 than it does in IE 9.
    One of the problems with IE9 is that it is the ONLY browser that understands both JScript and JavaScript and so needs to be handled as a special case.

    Presumably jQuery 1.4 was released before IE9 came along and so does not cater for the one browser that supports both languages. I had to make significant changes to the plain JavaScript code for handing change of input type specifically to cater for IE9 and presumably the same change has been applied to jQuery at some point but probably a more recent version than 1.4.
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">

  23. #23
    Gre aus'm Pott gold trophysilver trophybronze trophy
    Pullo's Avatar
    Join Date
    Jun 2007
    Location
    Germany
    Posts
    6,046
    Mentioned
    219 Post(s)
    Tagged
    12 Thread(s)
    Hi felgall,

    Quote Originally Posted by felgall View Post
    There were two typos in my code - a missing ) and a } in the wrong place - now fixed.
    I'm probably missing something obvious, but I still can't get your code to work for me in the latest Chrome on Linux.

    I reloaded the page you link to in post 4 to ensure I have the latest version, then copied it verbatim to an empty file.
    I don't see any errors in the console, but the masked text is not revealed when I click into the input field.

    Here's my code:

    Code:
    <!DOCTYPE HTML>
    <html>
      <head>
        <meta charset="utf-8">
        <title>MAsk passwords</title>
      </head>
    
      <body>
        <input type="password" name="pass" id="pass">
    
        <script>
          if (window.addEventListener)
          addEvent = function(ob, type, fn ) {
          ob.addEventListener(type, fn, false );
          };
          else if (document.attachEvent)
          addEvent = function(ob, type, fn ) {
          var eProp = type + fn;
          ob['e'+eProp] = fn;
          ob[eProp] = function(){ob['e'+eProp]( window.event );};
          ob.attachEvent( 'on'+type, o[eProp]);
          };
           
          (function() {
            var p = document.getElementById('pass');
            /*@cc_on
              @if (@_jscript)
              @if (@_jscript_version < 9)
              var inp = document.createElement("<input name='pass'>");
              inp.id = 'pass1';
              inp.type = 'text';
              inp.value = 'password';
              p.parentNode.replaceChild(inp,p);
              p = document.getElementById('pass1');
              @else
              p.type = 'text';
              p.value = 'password';
              @end
            @else */
              p.type = 'text';
              p.value = 'password';
            /* @end @*/
            passFocus = function() {
            if ('text' === this.type) {
              /*@cc_on
                @if (@_jscript)
              var inp = document.createElement("<input name='pass'>");
                inp.id = 'pass';
                inp.type = 'password';
                inp.value = '';
                this.parentNode.replaceChild(inp,this);
                inp.focus();
              @else */
                this.value = '';
                this.type = 'password';
                this.focus();
              /* @end @*/
              }
        		}
            addEvent(p, 'focus', passFocus);
          })();
        </script>
      </body>
    </html>

  24. #24
    SitePoint Member
    Join Date
    Jan 2014
    Posts
    9
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    a differente solution using two overlaid fields http://jsfiddle.net/psUe4/20/
    Code:
    <form>
        <label>
            <input id="text" type="text"></input>
            <input id="pass" type="password"></input>
        </label>
    </form>
    <script>$(function () {
        var $pass = $('#pass');
        var $text = $('#text');
        $text.bind('blur keyup', function() {
            var val = $text.val();
            $text.addClass('white');
            $pass.removeClass('white');
            $pass.val(val);
        }).bind('focus', function() {
            $text.removeClass('white');
            $pass.addClass('white');
        });
    });</script>

  25. #25
    Programming Since 1978 silver trophybronze trophy felgall's Avatar
    Join Date
    Sep 2005
    Location
    Sydney, NSW, Australia
    Posts
    16,869
    Mentioned
    25 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by davidfregoli View Post
    a differente solution using two overlaid fields http://jsfiddle.net/psUe4/20/
    Code:
    <form>
        <label>
            <input id="text" type="text"></input>
            <input id="pass" type="password"></input>
        </label>
    </form>
    <script>$(function () {
        var $pass = $('#pass');
        var $text = $('#text');
        $text.bind('blur keyup', function() {
            var val = $text.val();
            $text.addClass('white');
            $pass.removeClass('white');
            $pass.val(val);
        }).bind('focus', function() {
            $text.removeClass('white');
            $pass.addClass('white');
        });
    });</script>
    The problem with that approach is that all browsers then use two fields where only the almost dead IE8 actually needs it. All more modern browsers will allow you to change the type.
    Stephen J Chapman

    javascriptexample.net, Book Reviews, follow me on Twitter
    HTML Help, CSS Help, JavaScript Help, PHP/mySQL Help, blog
    <input name="html5" type="text" required pattern="^$">


Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •