2012-08-06 2 views
3

Как маскировать пароль, как на Android-мобильном телефоне, например, когда мы вводим ключ, он отображает ключ в течение нескольких секунд и меняет его на «*». Я пробовал плагин, упомянутый в Password masking as in mobiles using js, он не является оптимальным. И jsfiddle http://jsfiddle.net/medopal/X37Wz/ не способен обрабатывать обратное пространство и удалять. Не могли бы вы предложить другие методы для этого? Только использование jquery и не использование плагинов.маскирование пароля в поле пароля с помощью jquery

+2

Что причина иметь его на не-мобильной платформы? – zerkms

+0

Это для одного приложения, основанного на мобильных устройствах. – Rajeswari

+2

, если он будет использоваться на рабочем столе - в таком поведении нет причин. Если он будет использоваться на мобильной платформе - он будет автоматически замаскирован. – zerkms

ответ

3

здесь я сделал полный бункер для решения выше запроса. пожалуйста, проверьте демо-ссылку, как указано ниже:

Демо:http://codebins.com/bin/4ldqp8u

HTML:

<div id="panel"> 
    <input type="text" id="txtpwd" name="txtpwd" size="15"/> 
    <input type="text" id="txthidden" name="txthidden" size="15"/> 
    <div> 
    KeyCode Pressed: 
    <span id="keycode"> 
    </span> 
    </div> 
</div> 

JQuery:

$(function() { 
    //Extends JQuery Methods to get current cursor postion in input text. 
    //GET CURSOR POSITION 
    jQuery.fn.getCursorPosition = function() { 
     if (this.lengh == 0) return -1; 
     return $(this).getSelectionStart(); 
    } 

    jQuery.fn.getSelectionStart = function() { 
     if (this.lengh == 0) return -1; 
     input = this[0]; 

     var pos = input.value.length; 

     if (input.createTextRange) { 
      var r = document.selection.createRange().duplicate(); 
      r.moveEnd('character', input.value.length); 
      if (r.text == '') pos = input.value.length; 
      pos = input.value.lastIndexOf(r.text); 
     } else if (typeof(input.selectionStart) != "undefined") pos = input.selectionStart; 

     return pos; 
    } 

    //Bind Key Press event with password field  
    $("#txtpwd").keypress(function(e) { 
     setTimeout(function() { 
      maskPassword(e) 
     }, 500); 
    }); 

}); 

function generateStars(n) { 
    var stars = ''; 
    for (var i = 0; i < n; i++) { 
     stars += '*'; 
    } 
    return stars; 
} 

function maskPassword(e) { 

    var text = $('#txthidden').val().trim(); 
    var stars = $('#txthidden').val().trim().length; 
    var unicode = e.keyCode ? e.keyCode : e.charCode; 
    $("#keycode").html(unicode); 

    //Get Current Cursor Position on Password Textbox 
    var curPos = $("#txtpwd").getCursorPosition(); 
    var PwdLength = $("#txtpwd").val().trim().length; 

    if (unicode != 9 && unicode != 13 && unicode != 37 && unicode != 40 && unicode != 37 && unicode != 39) { 
     //If NOT <Back Space> OR <DEL> Then... 
     if (unicode != 8 && unicode != 46) { 
      text = text + String.fromCharCode(unicode); 
      stars += 1; 
     } 
     //If Press <Back Space> Or <DEL> Then... 
     else if ((unicode == 8 || unicode == 46) && stars != PwdLength) { 
      stars -= 1; 
      text = text.replace(text.charAt(curPos), ""); 
     } 
     //Set New String on both input fields 
     $('#txthidden').val(text); 
     $('#txtpwd').val(generateStars(stars)); 
    } 

} 

Demo:http://codebins.com/bin/4ldqp8u

+0

Спасибо. Но как он обрабатывается, если мы удалим символ из txtpwd? На данный момент он не удаляется в скрытом поле. – Rajeswari

+0

Привет, вы побывали выше демо-ссылки ..? Он работает отлично, как ваш запрос. – gaurang171

+0

Если вы наберете «123» в элементе ввода txtpwd и Теперь, согласно вашему запросу, я установил событие нажатия клавиши на txtpwd, поэтому, если ваш курсор на txtpwd после первой звезды похож на «* | * *», и вы нажимаете «Удалить», тогда он удаляет « 2 "от значения скрытого элемента" 13 ". – gaurang171

1

IE 10 имеет эту функцию. Может быть, кто-то может сорвать его? : |

IE 10 on Windows 8

Кроме того, я написал простой фрагмент кода, основываясь на этом here, которые должны получить вы начали кодирования самостоятельно.

EDIT: проверить код здесь:

<form action="#" onclick="return false;"> 
<input type="text" id="pv" name="passval" value="password" /><br> 
<input type="password" id="p" name="pass" value="passwordsd" /><br> 
<button id="b">Show</button> 
</form> 
<script> 
$("#b").mousedown(function(){ 
    $("#pv").val($("#p").val()); 
}).mouseup(function(){ 
    $("#pv").val(""); 
}); 
</script> 
3

на основе Keyur в codebins.com код выше, это отличный маленький ответ здесь https://stackoverflow.com/a/4843500/1056285, а также https://stackoverflow.com/a/1431109/1056285 (для изготовления забой на самом деле удалить без ошибок) я адаптировала решение принять во внимание забой тоже!

$(function() { 
    //Extends JQuery Methods to get current cursor postion in input text. 
    //GET CURSOR POSITION 
    jQuery.fn.getCursorPosition = function() { 
     if (this.lengh == 0) return -1; 
     return $(this).getSelectionStart(); 
    } 

    jQuery.fn.getSelectionStart = function() { 
     if (this.lengh == 0) return -1; 
     input = this[0]; 

     var pos = input.value.length; 

     if (input.createTextRange) { 
      var r = document.selection.createRange().duplicate(); 
      r.moveEnd('character', input.value.length); 
      if (r.text == '') pos = input.value.length; 
      pos = input.value.lastIndexOf(r.text); 
     } else if (typeof(input.selectionStart) != "undefined") pos = input.selectionStart; 

     return pos; 
    } 

    //Bind Key Press event with password field  
    $("#txtpwd").keypress(function(e) { 
     setTimeout(function() { 
      maskPassword(e) 
     }, 500); 
    }); 

    $("#txtpwd").keydown(function(e) { 
     if (e.keyCode == 8) { 
      setTimeout(function() { 
       maskPassword(e) 
      }, 1); 
     } 
    }); 

}); 

function generateStars(n) { 
    var stars = ''; 
    for (var i = 0; i < n; i++) { 
     stars += '*'; 
    } 
    return stars; 
} 

function maskPassword(e) { 

    var text = $('#txthidden').val(); 
    var stars = $('#txthidden').val().length; 
    var unicode = e.keyCode ? e.keyCode : e.charCode; 
    $("#keycode").html(unicode); 

    //Get Current Cursor Position on Password Textbox 
    var curPos = $("#txtpwd").getCursorPosition(); 
    var PwdLength = $("#txtpwd").val().length; 

    if (unicode != 9 && unicode != 13 && unicode != 37 && unicode != 40 && unicode != 37 && unicode != 39) { 
     //If NOT <Back Space> OR <DEL> Then... 
     if (unicode != 8 && unicode != 46) { 
      text = text + String.fromCharCode(unicode); 
      stars += 1; 
     } 
     //If Press <Back Space> Or <DEL> Then... 
     else if ((unicode == 8 || unicode == 46) && stars != PwdLength) { 
      stars -= 1; 
      text = text.substr(0, curPos) + text.substr(curPos + 1); 
     } 
     //Set New String on both input fields 
     $('#txthidden').val(text); 
     $('#txtpwd').val(generateStars(stars)); 
    } 

} 

Вы можете посмотреть ниже: http://codebins.com/bin/4ldqp8u/38

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа [здесь] (http://meta.stackoverflow.com/a/8259) и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – bummi

+1

@bummi Я не включал код, потому что у меня были некоторые проблемы с форматированием кода, и я был ленив, чтобы понять, что случилось. Но я понял это, и теперь я добавляю код тоже. Спасибо за предложение :) –

+0

Этот * почти * работал, но не работает правильно, когда вы выбираете все поле и нажмите delete. Я нашел этот скрипт, который работал лучше: http://www.sitepoint.com/better-passwords-1-the-masked-password-field/. –

 Смежные вопросы

  • Нет связанных вопросов^_^