こんにちは。
職人見習いの高嶋です。
用途はあまりないかもしれませんが、Javascriptでテキストフィールドからパスワードフィールドに変更するTipsです。
そもそも何故こういうニーズが発生したかといいますと、iPadでのWebコンテンツ制作過程でBlueTooth対応バーコードリーダーで読み込まれた英数字をこのフィールドにINPUTして且つリーダー機能のEnterで処理を発生させるというものがありました。
問題はiPadのソフトウェアキーボードが日本語変換モード状態でリーダーを使用すると文字列を読み込んだ後の自動Enter機能がForm Submitではなく文字変換候補確定に充てられてしまう事でした。
その為、無理はありますがEnter機能を効かせたい場合に日本語モードの存在しないパスワードフィールドに切り替える必要がありました。
※前提として最初はテキストフィールドで使用しなければいけませんでした。
では実際に試してみます。
>
上記をあるタイミングでパスワードフィールドに変更します。
最初にJQueryのような形で試してみました。
$("#hoge").replaceWith('');
上記で変更することができました。
これで良いのですが、私の実現させたい機能としては問題がありました。
元々HTMLファイルに書いていたテキストフィールドはEnterイベントを取得出来ていたのですが、動的に切り替えたパスワードフィールドはEnterイベントを取得できませんでした。
そこで、次の方法です。
var fragment = document.createDocumentFragment(); var node = document.createElement("input"); node.setAttribute("type", "password"); node.setAttribute("id", "hoge"); node.setAttribute("name", "hoge"); fragment.appendChild(node); $("#hoge").replaceWith(fragment);
JQueryのHTML展開を利用しない形でも現象は変わらずでした。
そして、TYPE属性を変えることで問題が解決しました。
あまりJavascript上でのパラメータ特定の為のループは好ましくはないのですが。
var inputParams = document.getElementsByTagName('input'); for( var i = 0; i { if( inputParams[i].id != 'inputField' ){ continue; } inputParams[i].type = 'passowrd'; break; }
※この記事は、なかの人(piro556)が書いています。