![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になります。
divにcontenteditable属性を付与して編集できるようにしました。
そのとき、日本語は入力禁止にしたいのですがime-modeはdivには使用できないみたいです。
日本語入力のときはkeycode229が返ってくるようなのでjavascriptでonkeydownのときに
if (event.keyCode == 229) {
return false;
}
というif文を入れてみました。alertとかで確認するとちゃんと日本語入力の時にはこのif文を通過しているみたいなのですが
日本語が入力されてしまいます。
div contenteditable=trueのときに日本語入力を禁止したい場合はどのようにすれば実現できるのでしょうか。
<div contenteditable=true onkeydown="return test();">編集テスト</div>
function test() {
if (event.keyCode == 229) {
return false;
}
return true;
}
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
fm……まぁie8とかcss3、html5未対応の記述もあるし
まーた、IEのバグな気もするんだけど……
keycode取得出来ないなら発想を変えればいいじゃない!
……てことで考えてみた
keydownとkeyup時、入力された項目をチェック
byte数と文字数が一致すれば保存し
一致しなければ直前のデータで上書き
(※半角文字は1byte、全角文字は2byteあります)
<html>
<head>
<script type="text/javascript">
<!--
var beforeData = "";
function isMultiByte(){
var strVal = document.getElementById('target').innerHTML;
var strByte = strSize(strVal);
if(strVal.length == strByte){
beforeData = strVal;
}else{
document.getElementById('target').innerHTML = beforeData;
}
}
function strSize(data) {
var byte = 0;
for (var i = 0; i < data.length; i++) {
var c = data.charCodeAt(i);
if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
byte += 1;
} else {
byte += 2;
}
}
return byte;
}
window.onload = function(){
window.document.onkeydown = function(evt){
isMultiByte();
}
window.document.onkeyup = function(evt){
isMultiByte();
}
}
// -->
</script>
</head>
<body>
<div id="target" contenteditable="true">test</div>
</body>
</html>
ありがとうございます。
keycodeばっかりに目がいってそういう発想がでてきませんでした。
ただ、IE8だとやはり書き込めちゃうみたいですが
何とかなりそうな気もしてきました。
IE8といってもXPのIE8で、vista以降のIE8だとkeycodeの取得もうまくいってるので
もしかするとIMEのバージョンの違いとかそういうので変わってくるんでしょうか。
No.2
- 回答日時:
あれ?……これで動かない?
<html>
<head>
<script type="text/javascript">
<!--
window.onload = function(){
window.document.onkeydown = function(evt){
if (evt){
if(evt.keyCode == 229){
evt.keyCode = 0;
return false;
}
}else{
if(event.keyCode == 229){
event.keyCode = 0;
return false;
}
}
}
window.document.onkeyup = function(evt){
if (evt){
if (evt.keyCode != 13){
event.keyCode = 0;
return false;
}
}else{
if (event.keyCode != 13){
event.keyCode = 0;
return false;
}
}
}
}
// -->
</script>
</head>
<body>
<div contenteditable=true>編集テスト</div>
</body>
</html>
ありがとうございます。
提示していただいたコードで試してみましたが、
日本語は入力できてしまいました。
IE9だとうまくいったのですが、IE8だと駄目でした。
IE8と9で何かが違うんですかね。
No.1
- 回答日時:
それ……keydown時?keyup時?
keydown時に
if (event.keyCode == 229) return false;
が効くのがIE、Chrome、Safari
firefoxは少し特殊でkeydown時229以外且つkeyup時
if (event.keyCode == 13){
//日本語じゃない
}
で判別かな
この回答への補足
回答ありがとうございます。
質問文中にも記載していましたが、keydown時です。
記載忘れでしたがIE8での動作確認です。
keydown時に229で判別して、半角/全角キーを押したときに229が取得できることは
確認できたのですが、そのあと、日本語を入力すると、
入力確定前の文字が書き込まれて、確定すると普通にDIV内に日本語が書かれてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
innerHTML実行後のイベント
-
【Tabキー】特定の範囲内だけで...
-
<a>タグのテキストを取得
-
onclickを使わずにイベント処理...
-
JavaScriptでのcheckbox作成
-
WordPressのコンタクトフォーム...
-
javascript 特定のタグのidの存...
-
クリックを押した時にリンク先...
-
javascriptでCSVを呼出しvlookup
-
ActiveXobjectが作成できない
-
重複しないくじの作り方がわか...
-
Boolean型配列中のTrueの有無を...
-
idを使わずにonclickで自身の要...
-
同じIDで定義した要素の配列を...
-
google apps scriptの終了のさせ方
-
Linux バイナリ実行できない "...
-
jspからjavascriptの変数引継ぎ
-
functionから別のfunctionを実...
-
C#テキストボックスの文字を配...
-
DOM要素を削除しても、イベント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
innerHTML実行後のイベント
-
任意の座標をクリックさせるには
-
javascript 特定のタグのidの存...
-
onchangeイベントを使ってspan...
-
HTML:Tableタグに対し、JavaScr...
-
モーダルダイアログウィンドウ...
-
日本語入力の禁止
-
javascriptでCSVを呼出しvlookup
-
Click回数を数え、規定された回...
-
画像上のクリックした場所が分...
-
【Tabキー】特定の範囲内だけで...
-
配列の大括弧と丸括弧はどう違う?
-
重複しないくじの作り方がわか...
-
javascriptで、表示されている...
-
div要素内の全input要素をdisable
-
javascriptであるボタンを押す...
-
javascriptで自動計算フォーム...
-
RadioButtonListの表示制御
おすすめ情報