2011-05-06 14 views
3

フォーカスがある限り、テキストエリアを拡張したい(高さを上げたい)。展開すると、テキストエリアはコンテンツを下に移動してはならず、代わりに他のコンテンツの上に表示する必要があります。フォーカスがある間にテキストエリアを展開して前面に移動

これは私がこれまでに(see here for an example)を使用しているコードです:

$(document).ready(function() { 
    $('#txt1').focus(function() { 
     $(this).height(90).css('zIndex', 30000); 
     $('#txt2').val('focus'); 
    }); 
    $('#txt1').blur(function() { 
     $(this).css('height', 'auto'); 
    }); 
}); 

テキストエリアのエキスパンドが正常に動作しますが、私はそれがページ上の他の要素の上に表示することができません(これは後続の要素の後ろに表示されます)。

他のすべての要素の上/前に拡張テキスト領域を表示する方法はありますか?

更新:この問題を再現するために使用(minmal)HTMLコードです:

<div style="height:20px;">first:<br/> 
    <textarea id="txt1" rows="1" cols="20" 
    style="width: 400px; height: 12px; font-size: 10px;"> 
    </textarea> 
</div> 
<br/> 
second: 
<br/> 
<input type="text" id="txt2"/> 
+0

これはtextAreaとその周辺要素に適用されるCSSですか?これはポジショニングと関係があります。 – Miquel

+0

CSSがありません(実行中の例を見るにはリンクをクリックしてください) – M4N

+0

プラグインを使用していますか?そこには本当に良いものがあります。これをチェックしてください:http://jsbin.com/ahaxe – pixelbobby

答えて

6

textareaの設定positionが動作します。 z-indexも取り除くことができます。

Working demo

+0

私は本当に興味があるのですか? – eykanal

+0

@eykanal:私の推測では、 'z-index'は位置付けされた要素にのみ適用されるので、位置がないということは、要素がページ上に表示される順序でz-インデックス付けされることを意味します。ある要素に 'position:relative'を追加すると' static'要素の残りの要素よりも上になります。そのため 'position:relative'が追加されると' z-index'が削除されます。 – Town

+0

@ M4N:まあ、それは持続している間受け入れられた答えであることを楽しんだ:D – Town

1

スタイル 'position:absolute;'を設定してみてください。最初のテキストエリア(txt1)に、そのトリックを行う必要があります。

+0

ほぼ!残念ながら、これにより、テキストエリアの右側にあるコンテンツは消えます。 – M4N

4

z-indexが静的​​以外positionを有する素子ずに何もしない追加。個人的に、私はCSSの変更のすべてを持つクラスを追加し、この(demo)のようなオーバーレイを含むであろう:

.focused { 
    position: relative; 
    height: 90px !important; 
    z-index: 1000; 
} 
.overlay { 
    display: block; 
    position: absolute; 
    height: auto; 
    bottom: 0; 
    top: 0; 
    left: 0; 
    right: 0; 
    margin: 0; 
    background: #000; 
    opacity: .75; 
    filter: alpha(opacity=75); 
    z-index: 999; 
} 

CSSスクリプト

$(document).ready(function() { 
    $('#txt1').focus(function() { 
     $('<div class="overlay"/>').appendTo('body'); 
     $(this).addClass('focused'); 
     $('#txt2').val('focus'); 
    }); 
    $('#txt1').blur(function() { 
     $(this).removeClass('focused'); 
     $('.overlay').remove(); 
     $('#txt2').val('blur'); 
    }); 
}); 
+0

私の場合、オーバーレイが気を散らすだろうが、良い解決策。 – M4N

+0

それは問題ありません:P、しかし、 '#txt1'がぼやけているときには、それは' auto'の高さが当初よりも高くなっています(少なくとも私の場合はFirefoxのように)。それとも、元の高さを数値として保存してください。 – Mottie

+0

はい、ヒントのおかげで! – M4N