textareaでctrl + Enterが押下されたときに改行を行う方法をご存じの方ご教授お願いします。

現在、javascriptを利用しtextarea内でEnterを押下された場合は次項目へ、ctrl + Enterが押下された場合は改行を行う処理を実装しています。
Enter押下時の動作はEventオブジェクトのkeyCode属性に9を設定することで実現できのたのですが、
ctrl + Enterの対応はどうしても実現できません。
textareaでctrl + Enterが押下されたときに改行を行う実現方法をご存じの方はご教授お願いします。
※ ブラウザはIE7を利用しています。(とりあえず)

回答の条件
  • 1人50回まで
  • 登録:2008/09/14 14:52:53
  • 終了:2008/09/14 19:36:19

回答(2件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/09/14 15:01:23

ポイント28pt

Event.ctrlKey (Ctrl が押下されていれば true) で判別してはどうでしょうか。

id:Hoxy

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

記述してくださったとおり、event.ctrlkeyがtrueのときだと私も理解しています。

質問の内容はそのevent.ctrlkeyがtrueのときにどのように実装したらよいか?っということです。

Enter押下時の処理は以下のように行いました。(※jQueryを利用しています。)

---------------------------------

$('textarea').keydown(function(ev){

if(ev.keyCode == 13){

if(ev.ctrlKey){

return; // ← ① ここにctrl + Enter時の処理が必要!!

}

ev.originalEvent.keyCode = 9;

}

});

---------------------------------

また、ctrl + Enterの処理を実現するために、以下の方法を試しました。

・EventオブジェクトのctrlKey属性にfalseを設定する。

→ EventオブジェクトのctrlKey属性がtrueに設定されていうから、改行の処理が行われないのだろうと考え、

ctrlKey属性にfalseを設定しようとしたのですがctrlKey属性は参照のみのようで、

trueを設定しようとするとエラーが発生し、うまくいきませんでした。

・Eventオブジェクトを新規に作成し、指定のtextareaのkeydownイベントをもう一度発生させる。

→ IEの場合、document.createEventObject()メソッドにてEventオブジェクトを生成できるので、

新規に作成したEventオブジェクトのkeyCode属性に13(Enterキーのコード)を設定し、

fire()メソッドにて着火してみました。

イベント自体は発生したのですが、改行は行われませんでした。

(イベントが発生してもブラウザには関係ないので、改行されないのは当り前といえば当たり前です・・・。)

上記のことを踏まえた上で、ご回答いただければと思います。

2008/09/14 15:12:36
id:GoldenDawn No.2

GoldenDawn回答回数426ベストアンサー獲得回数812008/09/14 17:07:23

ポイント42pt
if (ev.ctrlKey) {
  var selection = document.selection.createRange() ;
  selection.text = "\n" + selection.text ;
  return ;
}

とりあえず…… IE6 で動作テスト。Firefox では動作しません。

id:Hoxy

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

Rangeオブジェクトは知りませんでした。

上記の方法でこちらが思っていたことを実現することができました。

ありがとうございました。

2008/09/14 19:34:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません