入力フォームにデフォルト値でガイド的な文字を入れ
フォームクリックでガイド文字が消え、入力できるようになるものを
このサイトで教えてもらって実装したのですが
Firefoxでは下記のソースで実装できたのですが
IE6とIE7ではフォームに入力すると
入力した文字が●●●●ではなく、そのまま表示されてしまいます。
これを●●●●になるようできないでしょうか?
以下はサンプルで作ったソースです。
-------------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>テスト</title>
<script>
<!--
function hide_pwd(pw){
if(pw == 'パスワード'){
document.getElementById("pwd").value ="";
document.getElementById("pwd").setAttribute("type", "password");
}
}
// -->
</script>
</head>
<body>
<div class="id_box"><input type="text" name="id" onfocus="if (this.value == 'アカウントID') this.value='';" value="アカウントID"></div>
<div class="pw_box"><input id="pwd" type="text" name="pass" onfocus="javascript:hide_pwd(this.value);" value="パスワード"></div>
</body>
</html>
-------------------------------------------------------------------
たぶんjavascriptだと思うのですがよろしくお願いします。
No.1
- 回答日時:
IEやOperaでは、Inputのtype変更が通らないみたいです。
(=setAttribute("type", "password");の部分)
それなので、もとのHTMLのtype="text"のままなので、そのまま表示されてしまいます。
無理やりやるなら、INPUTタグを書き直してしまえば可能みたい。
例えば、引数をthisにしておいて
function test(e){
div=e.parentNode;
div.innerHTML='<input type="password" ・・・・
みたいな感じ。
(自分自身を書き直すので、かなり気持ち悪いですが)
ただし、IE6ではこの後で div.firstChild.focus(); としてもフォーカスが戻らない現象が起こりました。(Operaでは問題ありませんが)
試行錯誤してみると、IEでは他の要素に一度フォーカスを移動させてから戻すと、どうやらフォーカスが戻るみたいです。
とりあえずの解決は、それ用にhiddenなどでダミーのinputを作っておくことかな?(他に良い方法があるかも知れませんが…)
No.2
- 回答日時:
パスワードのオブジェクトはfocusしたときに削除してしまって
あたらしいオブジェクトを起こしてみては?
こんな感じで・・・
<script>
function hide_account(obj){
if(obj.value == 'アカウントID') obj.value="";
}
function hide_pwd(obj){
if(obj.value == 'パスワード'){
var p=obj.parentNode;
var newobj=new Object();
try{
newobj=document.createElement("<input type='password'>");
newobj.setAttribute("width",obj.offsetWidth);
newobj.setAttribute("height",obj.offsetHeight);
}catch(e){
newobj=document.createElement("input");
newobj.setAttribute("type","password");
}
newobj.setAttribute("name",obj.getAttribute("name"));
p.insertBefore(newobj,obj);
p.removeChild(obj);
newobj.focus();
}
}
</script>
<div><input type="text" name="id" onfocus="hide_account(this);" value="アカウントID"></div>
<div><input type="text" name="pass" onfocus="hide_pwd(this);" value="パスワード"></div>
回答ありがとうございます。
ただ、今回<input>にCSSで長さやマージンを設定していて
yambejpさまのソースでやってみたところ
フォーカスした時にCSSが適用されなく、テキスト入力エリアが
もどってしまいまいした。
-----------------------------------------------------------
<style type="text/css">
.test{
height: 15px;
width: 206px;
margin: 0px;
padding: 0px;
_margin-top: -1px;
_margin-bottom: -1px;
}
</style>
<input type="text" class="test" name="pass" onfocus="hide_pwd(this);" value="パスワード">
-----------------------------------------------------------
クラスを反映させたままのフォーカスで消す処理は
できるのでしょうか?
No.3
- 回答日時:
別案。
background-imageご回答ありがとうございます。
ただ、私の知識と経験不足によりご回答の意味が
わかりませんでした。もしお手すきな時がありましたら
詳しくソースなど頂けたらと思います。
取り急ぎ、お礼まで。
No.4ベストアンサー
- 回答日時:
ああ、classもあるのね
classはIEでsetAttributeできないので、前回使ったのと
おなじパターンでやります。
ちょっと検証してみたらtry~catchだとNNで動かないようなので
以下のように書き換えました。
<style>
.test{
height: 15px;
width: 206px;
margin: 0px;
padding: 0px;
margin-top: -1px;
margin-bottom: -1px;
}
</style>
<script>
function hide_account(obj){
if(obj.value == 'アカウントID') obj.value="";
}
function hide_pwd(obj){
if(obj.value == 'パスワード'){
var p=obj.parentNode;
var newobj=document.createElement("input");
newobj.setAttribute("type","password");
newobj.setAttribute("class",obj.getAttribute("class"));
if(!newobj.getAttribute("class")) var newobj=document.createElement("<input type='password' class='"+obj.className+"'>");
newobj.setAttribute("name",obj.getAttribute("name"));
p.insertBefore(newobj,obj);
p.removeChild(obj);
newobj.focus();
}
}
</script>
<div><input type="text" class="test" name="id" onfocus="hide_account(this);" value="アカウントID"></div>
<div><input type="text" class="test" name="pass" onfocus="hide_pwd(this);" value="パスワード"></div>
ご回答ありがとうございます!
意図したものができました。
もしまた何かあった時に、お手すきでございましたら
よろしくお願い致します。
No.5
- 回答日時:
表記は <label> だと思うんだけどね。
http://template.b-cures.net/dl/form/index5.html
表示されっぱが気になる場合は、
input:focus { background-image : none; }
===============================================================
蛇足
obj.value == 'アカウントID' → obj.value == obj.defaultValue
newobj.setAttribute("class",obj.getAttribute("class"));
↓
newobj.className = obj.className;
http://oshiete1.goo.ne.jp/qa4958379.html
p.insertBefore(newobj,obj);
p.removeChild(obj);
↓
p.replaceChild( newobj, obj );
なるほど!!
こういう手もあるんですねぇ!
画像だとデザイン的にも凝ったものを作れるし
CSSで調整するので各ブラウザのデザインの統一にもなりますし
すばらしいです!
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クイズ作成:15個の問題から5個...
-
テキストボックスに入力された...
-
value内に変数を入れたい
-
javascriptで複数の計算を同時...
-
javascriptでhiddenに二次元配...
-
Pythonで会員サイトの自動ログ...
-
ラジオボタンとテキストを同時...
-
引数に数値、文字列の混在
-
switchを使って四則演算のプロ...
-
フォームで入力した値を別のフ...
-
選択したラジオボタンに対応し...
-
正規表現で複数マッチ条件で悩...
-
ボタン2回押しを無効にしたい
-
<form action="#">の意味とは?
-
<td>の中のonClick="location" で
-
JavaScriptにて動的に配列を作...
-
背景色を変えて未入力チェック...
-
【jsp/Java】チェックボックス...
-
javascriptで画像の移動
-
selectを変更不可にしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
hiddenのvalueの値を変えたい
-
value内に変数を入れたい
-
複数のsubmitボタンで押された...
-
3桁区切りのカンマをつけたい...
-
VB.NET DateTimeの型について
-
javascriptでhiddenに二次元配...
-
テキストボックスに入力された...
-
eval()を使わずに数値を取得し...
-
引数に数値、文字列の混在
-
クイズ作成:15個の問題から5個...
-
sessionStorageを調べています。
-
setIntervalの間隔を途中で変更...
-
javascriptにてHTMLのhiddenエ...
-
name属性が同じフォームが複数...
-
セレクトボックスの初期選択状...
-
Pythonで会員サイトの自動ログ...
-
演算対象の数字と演算子を入力...
-
商品コードを入れたら自動で商...
-
フォームで入力した値を別のフ...
-
ラジオボタンの選択で解答・点...
おすすめ情報