2011-05-06 55 views
3

只要焦點處於焦點位置,我想展開一個textarea(增加高度)。展開後,textarea不應將內容向下移動,而應顯示在其他內容的上方。當它有焦點時,展開textarea(並將它帶到前面)

這是我使用至今代碼(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'); 
    }); 
}); 

textarea的擴張工作正常,但我不能讓它顯示以上頁面上的其他元素(它顯示在後面的元素後面)。

是否有任何技巧在所有其他元素的前面顯示擴展的textarea?

更新:這是用來重現該問題的(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 2011-05-06 13:55:37

+0

沒有CSS(請點擊鏈接查看正在運行的示例) – M4N 2011-05-06 13:56:48

+0

您是否願意使用插件?那裏有一些非常好的處理所有這些的好東西。看看這個:http://jsbin.com/ahaxe – pixelbobby 2011-05-06 14:01:56

回答

6

設置positiontextarea上工作。你也可以擺脫z-index

Working demo

+0

我很好奇爲什麼這個工程。 – eykanal 2011-05-06 14:12:43

+0

@eykanal:我的猜測是,由於'z-index'僅適用於定位元素,缺少位置意味着元素按照它們在頁面上出現的順序進行z-索引。向一個元素添加'position:relative'會將其添加到靜態元素的其餘部分之上,這就是爲什麼只要添加'position:relative'就可以刪除'z-index'。 – Town 2011-05-06 14:24:27

+0

@ M4N:好吧,我喜歡被接受的答案,而它持續了:D – Town 2011-05-06 14:26:04

1

嘗試設置樣式'position:absolute;'在第一個textarea(txt1)上,那應該可以做到。

+0

差不多!不幸的是,這使位於textarea右側的內容消失。 – M4N 2011-05-06 14:10:46

4

添加z-index什麼也不做,而不必不是靜態的一個position其他的元素。就個人而言,我想補充一類具有所有的CSS變化和包括覆蓋,像這樣(demo):

CSS

.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; 
} 

腳本

$(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 2011-05-06 14:22:30

+0

這很好:P,但我仍然會將該類添加到高度,因爲當#txt1模糊時,它的「自動」高度比最初的高(至少在Firefox中)。或者將原始高度保存爲數字。 – Mottie 2011-05-06 14:24:46

+0

是的,謝謝你的提示! – M4N 2011-05-06 14:34:50

相關問題