- PR -

JavascriptでのShiftキー機能

投稿者投稿内容
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-01-18 16:29
いつもお世話になっています。
今回、上・下キーで項目のフォーカス移動をさせたいと考えています。
上キーを押すとShift + Tabと同等の動きをし、
下キーを押すとTabと同等の動きをします。

下キーを押す動きは記述できたのですが上キーのShiftを押した状態と
いう処理にてこずっています。
どのように記述すれば上手く行くでしょうか?

下キーはこんな感じで記述しました。
event.keyCode = 9;
window.event.returnValue = true;

よろしくお願いします。

XPProSP2 VS.NET2003 IE6.0
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-18 16:55
引用:

パンダおにぎりさんの書き込み (2006-01-18 16:29) より:

どのように記述すれば上手く行くでしょうか?


keyCode = 9;
Shift = true;

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-01-18 17:04
event.keyCode = 9;
event.Shift = true;
window.event.returnValue = true;

このように書いてみたんですが・・・
何も起きませんでした。

event.shiftKey = true;
と書くとエラーが出ますよね^^;

書き方が間違っているでしょうか?
もう少し詳しく書いて下さると助かります。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-01-18 17:16
キーを押したことにするんじゃなくて、キーを押したのと同じ処理をするように作っては、だめなんでしょうか。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-01-18 17:25
昔試した限りでは、event.shiftKeyは確かreadonlyだったかと...
対象のエレメントを配列にしておいて、操作する(前のコントロールに.fucus()で移動)ぐらいしか手はなかったと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-18 17:43
引用:

でっち6号さんの書き込み (2006-01-18 17:25) より:

昔試した限りでは、event.shiftKeyは確かreadonlyだったかと...


すいません、そうでした。
普通に間違えておりました... orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-01-18 17:49
じゃんぬねっとさん、そんなに落ち込まないで下さい。

keyCodeが変えれるならshiftKeyも変えれてもいいのにと思うのですがね。
今回は別の方法で試してみます。

mioさん、でっち6号さんも有難う御座いましたm(_ _)m
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-01-18 21:14
ご自身でやられるようですが、サンプルを作ってしまったので投下...
(上ボタンで前のコントロールに移動するだけのもの。下は拾ってません。)

コード:
var form_elements = new Array();
function set_onkeydown(){
    for (var i=0; i<document.forms[0].elements.length;i++){
        if (document.forms[0].elements[i].type != 'hidden'){
            form_elements.push(document.forms[0].elements[i]);
            document.forms[0].elements[i].onkeydown = function(){element_onkeydown(this)};
        }
    }
}

function element_onkeydown(this_element){
    if (window.event.keyCode==38){
        for (var i=1; i<form_elements.length;i++){
            if (form_elements[i]==this_element){
                form_elements[i-1].focus();
            }
        }
    }
}


set_onkeydown()をbodyタグのonloadで実行するか、RegisterStartupScriptで実行してあげれば良いです。
直接element_onkeydownの引数に"前のコントロール"を渡すことができればスマートになるんですけど、私ではムリでした。
あと、どのくらいのコントロール数に耐えられるかも実験してません。

#試していて気付いたのですが、上下でタブ移動ってDropDownListとかの操作で困りません?
#変換中の上下は拾わないみたいですけど。

スキルアップ/キャリアアップ(JOB@IT)