テキストボックスからフォーカスが外れた際のイベント(jQueryの'focusout'イベントを使ってます)で、選択されていた部分の文字列を取得するという処理をしたいのですが、どうしてもうまく行きません。
以下のJavaScriptのソースコード中、try区の2行目でエラーが発生し、「引数が無効です」と言われてしまうのですが、どうしても原因が特定できず困っています。
どなたか、原因のわかる方のお知恵をお借りできたらと思います。
ソースコードを掲載したら、質問が長すぎると言われてしまったので、以下に別途掲載しました。
http://d.hatena.ne.jp/norisuke3/20110208/1297129434
よろしくお願いします。
とりあえずこれで動いたという回答です。
目的は focusout時に選択した文字列を取得 でしょうか。
IEだけで動けばいいのですか?
<html> <haed> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script> <script type="text/javascript"> jQuery(document).ready(function($){ var test1 = function(e){ var range = document.selection.createRange(); //var range2 = document.body.createTextRange(); var range2 = range.duplicate(); var res = {}; try{ //range2.moveToElementText(this); range2.setEndPoint('EndToEnd', range); } catch(e) { alert(e.message); } res.start = range2.text.length - range.text.length; res.end = res.start + range.text.length; res.text = range.text.substring(res.start, res.end); alert(range2.text); }; $("#my-input, textarea") .bind("focusout", test1); }); </script> </haed> <body> <input id="my-input" type="text" name="foo" value="test" /> <br> <textarea>aaaa bbb ccc </textarea> </body> </html>
もしくは、
(Vista, IE8, Firefox3.6.13で動作確認)
<html> <haed> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $("#my-input, textarea").bind("focusout", function(e){ //select var isMSIE = /*@cc_on!@*/0; if (!isMSIE) { alert(this.value.slice(this.selectionStart, this.selectionEnd)); } else { var range = document.selection.createRange(); alert(range.text); } }); }); </script> </haed> <body> <input id="my-input" type="text" name="foo" value="test" /> <br> <textarea>aaaa bbb ccc </textarea> </body> </html>
参考:
× var range2 = document.body.createTextRange();
○ var range2 = range.duplicate();
完璧です!!
本当に助かりました。
windofjulyさんは、私の質問の検証中にわ私が回答撃ち切ってしまったみたいで申し訳ないです。
別途ポイントを送らせていただきます。
まじめに考えようとしなかっただけなんだし…(投稿時間を見比べれば判りますよ)
そこまでしてポイントが欲しいのか・・・
W3C DOM Ranges for IE
http://code.google.com/p/ierange/