プロが教えるわが家の防犯対策術!

try {
elem_id = event.srcElement.id;
} catch ( e ) {
elem_id = event.target.id;
}


if (event.keyCode == 13 || event.charCode == 13) {
var m = document.getElementById(elem_id);
var r = m.getAttribute("rows");
m.setAttribute("rows", parseInt(r)+1);
} else if(event.keyCode == 8 || event.charCode == 8){
var m = document.getElementById(elem_id);
var r = m.getAttribute("rows");

if(parseInt(r)>1){
m.setAttribute("rows", parseInt(r)-1);
}
}

現在、textareaのonkeydownイベントで上の関数を呼び出しているのですがこれを行の先頭でバックスペースを押されたときのみtextareaのrowsを1減らすというようにしたいのですがやり方が分かりません。
例えば、textareaの内容が
aa
bb
といったような場合、bbの前でバックスペースが押されたときのみrowsを1減らしたいのです。
よろしくお願いします。

A 回答 (5件)

<head>ないに、おかないで、</body>のちょくぜんに、すくりぷと


おいておくれ。

<head>ないにおくと、まだてきすとえりあがよみこまれていないのだから
えら~になるよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

正常に動きました。

お礼日時:2009/11/17 22:05

#3です。

ちょっと、しゅうせいします。
ちらつくというか、いちばんしたで、みえたり、きえたり・・・なので

while( e.clientHeight < e.scrollHeight && rows < max )
に、してちょ。
いちいち、もじがにゅうりょくされるたびに、へらして
ふやして・・・・。こうりつがわるかいなぁ~
ど~~~んと、さくじょすると、1ぎょうずつへっていき・・
そのうちちょうじりがあうってのもしょぼいし
    • good
    • 0

<textarea cols="40" rows="4" name="" id="p" onKeyup="check();">


</textarea>

var Expansion = function ( e, max, min ) {
 if( 'TEXTAREA' != e.nodeName )
  return function ( ) { return false; };
 
 var rows = e.rows;
 
 min = 'undefined' === typeof min ? rows: min;

 return function () {
  if( min < rows ) e.setAttribute( 'rows', --rows );
  while( e.scrollTop && rows < max )
   e.setAttribute( 'rows', ++rows );
 };
};

var check = Expansion( document.getElementById('p'), 20);

ちょっとonkeyupのよびだしかたは、あれだけど、べつあん。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

書いていただいたコードの、var Expansion ~の部分からvar check = Expansion~の部分までを<head>内のjavascript宣言部分に、<textarea cols="40"~の部分を<body>内にコピペしてみたのですがうまく動きませんでした。

お礼日時:2009/11/17 14:21

{補足}


本来のバックスペースの動作も無効にする必要があります。
IEの時:event.returnValue = false;
IE以外:event.preventDefault();

以下の用にすれば一応出来ましたが、ちょっと意図とちがうかも。
それとIEとそれ以外ではonkeydownのタイミングが違ってたかも?
<script type="text/javascript" charset="utf-8">
<!--
function fuga(){
try {
elem_id = event.srcElement.id;
} catch ( e ) {
elem_id = event.target.id;
}
if (event.keyCode == 13 || event.charCode == 13) {
var m = document.getElementById(elem_id);
var r = m.getAttribute("rows")
m.setAttribute("rows", parseInt(r)+1);
} else if(event.keyCode == 8 || event.charCode == 8){
if((document.getElementById(elem_id).value.length % 10)==0){
try {
event.returnValue = false;
} catch (e) {
event.preventDefault();
}
var m = document.getElementById(elem_id);
var r = m.getAttribute("rows");
if(parseInt(r)>1){
m.setAttribute("rows", parseInt(r)-1);
}
}
}
}
// -->
</script>
</head>
<body>
<textarea id="hoge" rows="20" cols="10" onkeydown="fuga();"></textarea>
</body>
    • good
    • 0

テキストエリアの中で入力位置(カーソルの位置)がどこにあるのか


把握するのが困難そうです。入力されたテキストの長さ(文字数)も
文字が入力される度にチェックして、colの長さの整数倍の時だけ、バックスペースキーによるrow削除を有効にすれば出来るのではないかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やはり、テキストエリア内の入力位置を取得するのは難しいですか。
No.2のコードもありがとうございます。
参考にさせていただきます。

お礼日時:2009/11/17 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!