Имитировать ввод типа пароля при использовании contenteditable div

Я использую contenteditable divs вместо входных элементов, потому что они более гибкие, когда дело доходит до стиля в поле ввода. Мне просто интересно, есть ли способ сделать вход похожим на элемент ввода с его типом, установленным на пароль, например:

<input type='password'>

Я надеюсь, что достаточно ясно. Спасибо.

4 ответов


вам нужно будет узнать конкретные настройки CSS браузера для mozilla и co.. но в WebKit это выглядит так. также вам нужно добавить обработчик нажатия клавиш через javascript для него.

<style>
#password {
    -webkit-text-security: disc;
    height:20px; width:100px;
    -webkit-appearance: textfield;
    padding: 1px;
    background-color: white;
    border: 2px inset;
    -webkit-user-select: text;
    cursor: auto;
}
</style>
<div id="password" contenteditable="true">yourpassword</div>
<script>
    //you could use javascript to do nice stuff
    var fakepassw=document.getElementById('password');
    //fakepassw.contentEditable="true"; 
    fakepassw.addEventListener('focus',function(e){ /*yourcode*/ },false);
    fakepassw.addEventListener('keyup',function(e){ console.log(e.keyCode) },false);
</script>

но в любом случае, пароль только в сочетании с элементами element.innerHTML="yourpassword" и element.innerText="•••••••"

вы можете сделать это с помощью javascript тоже и заполнить innerText с "•"


я столкнулся с этим вопросом, когда я пытался имитировать ввод пароля, но накладывая другой div с s не был вариантом для меня, так как я хотел, чтобы он работал без JavaScript.
То есть text-security: disc, но на данный момент для этого недостаточно поддержки.

Итак, что я сделал, это создать шрифт на FontStruct в котором все латинские символы (включая диакритических ones) выглядят как .

вот ссылка на файл на my в Dropbox.

при использовании этого просто добавьте это в свой файл css

@font-face {
  font-family: 'password';
  src: url('../font/password.woff2') format('woff2'),
       url('../font/password.woff') format('woff'),
       url('../font/password.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}

затем, чтобы использовать его, просто применить font-family: 'password' в свой элемент.

P. S. Если по ссылке Dropbox и вы случайно его скачал, не стесняйтесь, чтобы заменить ссылку. В противном случае просто дайте этому ответу комментарий


чтобы избавиться от пароля запомнить, я обработал пароль как поле ввода и" размыл " введенный текст.

это менее "безопасно", чем собственное поле пароля, так как выбор типизированного текста покажет его как чистый текст, но пароль не запоминается. Это также зависит от активации Javascript.

<input style="background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name="password" size="10" maxlength="30" onfocus="this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress="this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete="off" type="text">

вот мое решение. Он не идеален (он обрабатывает только дополнительные / удаленные символы в конце), но он довольно короткий:

HTML-код:

<input id="my_id" type="text" oninput="input_to_bullets (this)" onfocus="this.value = ''; this.input_pw = '';" autocomplete="off" />

JavaScript:

function input_to_bullets (el) {
   if (! el.input_pw) {
      el.input_pw = '';
   }
   var val = el.value;
   var len = val.length;
   var chr = val.substr (len - 1);
   if (chr != "•") {
      el.input_pw += chr;
   } else {
      el.input_pw = el.input_pw.substr (0, len);
   }
   el.value = el.value.replace (/./g, "•");
}

JavaScript для получения пароля:

var password = document.getElementById ('my_id').input_pw;