- - PR -
フォーカス(タブ移動)が効かない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-02-02 19:43
こんにちは。
環境:WinXP SP-3, Tomcat6, JDK 1.6, IE6 Dojo1.1 & SigmaGrid2.1と2つのJavascriptライブラリを使ってます。 この2つのツールの影響(特にSigmaGrid)が強くあり、回答が得られないかもしれませんが、よろしくお願いします。 現象としては、textにフォーカスが当たってるにも関わらず、上キーやタブを押しても、フォーカスが移動しません。 この画面自体は、SigmaGridとDojoが同居しているのですが、親画面にSigmaGridのツールを使った一覧が表示され、DojoのDialogを表示した時のこの画面に存在するtextにフォーカスが当たった時の発生します。 目視する限り、コードでもtextのフォカスは点滅しており、確かに当たっています。 アルファベットキーは確かにtextに追加もされます。 ですが、上キーやタブキーを押すと、親画面(一画面ですが)の一覧のActive行が動いてしまいます。 SigmaGridのツールがこのキーイベントのDomを保持しているのかもしれませんが、どうすれば良いのか分からない状態です。 アドバイス頂けたら幸いです。 |
|
投稿日時: 2009-02-02 22:21
現象が再現するミニマムコードを〜こぴぺしても動かないかもしれないけど〜
提示できますか? サーバー側ではなくて、ブラウザ上のコード〜特になんとかグリッド近辺の〜 を見せてください。 |
|
投稿日時: 2009-02-02 23:51
ありがとうございます。
かなりscript処理が大きいアプリでして、 若干大きく省略してしまうかもしれませんが、 お分かりになりましたら、よろしくお願いします。 http://www.sigmawidgets.com/download.html ●親画面 <html> <script type="text/javascript" src="/dojo/dojo/dojo.js" djConfig="isDebug: false"></script> <script type="text/javascript" src="/SigmaGrid/gt_msg_en.js"></script> <script type="text/javascript" src="/SigmaGrid/gt_grid_all.js"></script> <script language="JavaScript"> <!-- dojo.require("dijit.form.Button"); dojo.require("dijit.Dialog"); dojo.require("dojo.parser"); //SigmaGrid関連 var grid_id = "myGrid1" ; var gridList = new Array(); var gridOption= { fields :[ {name : 'ps_no'}, {name : 'ps_delete'} ], uniqueField : 0 , recordType : 'array', data : gridList } var gridColsOption = [ {id: 'ps_no', header : "No", headAlign:"center", align:"right" }, {id: 'ps_delete', header : "削除", headAlign:"center", align:"center"} ]; var gridOption={ id : grid_id, container : 'gridbox1', replaceContainer : true, dataset : gridOption, columns : gridColsOption , onClickCell : function(value, record , cell, row, colNO, rowNO, columnObj, grid){ //@showDojoDialog(省略します) dialogInit(); dojo.parser.parse("panel"); }, defaultRecord : ["",""], pageSize:100, toolbarContent : 'state', showGridMenu : false, allowCustomSkin : false, allowHide : false }; var mygrid1 = new Sigma.Grid( gridOption ); Sigma.Util.onLoad( Sigma.Grid.render(mygrid1) ); --> </script> <body onLoad="body_onLoad()"> <!-- @showDojoDialogエリア --> <div id="panel" style="display:none "></div> <!-- @SigmaGrid一覧表示エリア --> <div id="bigbox" style="display:!none;margin: 0px 10px 0px 10px;"> <div id="gridbox1" style="border:0px solid #cccccc;background-color:#f3f3f3;" ></div> </div> </body> </html> ●Dialog(別ファイル) <script> function dialogInit() { //このDialogが表示される時に走るscript document.edit.name.focus(); }; </script> <div dojoType="dijit.Dialog" id="panel" title="テスト"> <form name="edit" enctype="multipart/form-data" method="post" onkeydown="return Handler_keypress(event);" onSubmit="return false;"> <table width="360"> <tr> <td nowrap><font style="font-size: 12pt;">名称</font></td> <td nowrap><input type="text" name="name" size="40" maxlength="255" value=""/></td> </tr> <tr> <td align="right" colspan="2"> <button dojoType='dijit.form.Button' label='編集'></button> <button dojoType='dijit.form.Button' label='閉じる'></button> </td> </tr> </table> </form> </div> 試して頂けたら、大変ありがたいのですが、かなり省略しています・・。 本来はAjaxで「Dialog表示」部を取得していたりと複雑な為・・、申し訳ありません。 また、DojoDialog全般に言えるのですが、これは別ファイルですが、htmlタグで完結したファイルでもない為、body_onloadが効きません。 ただ、このSigmaGridが親画面にある場合と無い場合では、このフォーカスの問題は起こりません。 上記のURLでDLしたアーカイブには、APIもあるのですが、clearFocus()らしきものもありません。 結論と推測を急ぐと、SigmaGridで行っているaddEventListnerをクリアする方法があれば良いのですが・・。取得方法とやり方が分かりません。 お分かりになりましたら、よろしくお願いします。 [ メッセージ編集済み 編集者: 未記入 編集日時 2009-02-02 23:52 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2009-02-02 23:54 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2009-02-03 10:16 ] |
|
投稿日時: 2009-02-03 01:19
Dojo のダイアログは何者ですか?
具体的かつ詳細に書いてください。 レイヤー被せているだけなら、、、、グリッドにフォーカスが当たらない ようにするしか無いでしょうね。 |
|
投稿日時: 2009-02-03 07:52
ぴあちゃんさん、ありがとうございます。
おっしゃるとおり、DojoのDialog(ほとんど標準仕様の物を使ってます)は、モーダルダイアログで、表示の時はCSSで後ろ(SigmaGridを使ってる親画面)が押下不能の状態となってます。 と言うか、なってた物と思ってました・・。 アプリを使う側は、このDialogを使う事で2画面に見えますが、HTMLのコードで見れば、一ファイルです(divの"panel"領域に子画面情報divを流し込んで、parseしている)。 なので、フォーカスが2つ存在しているとは考えにくく、キーを感知するEventListnerをSigmaGridのツールが内部で生成していると思っているんですが・・。 また、データ取得部を丸々削っていましたが、SigmaGridの一覧のデータ行を選択するとその行のデータが、Dialogの子画面に遷移し、編集が行えるような流れです。 明示的にフォーカスをクリアする方法はありませんでしょうか? アルファベット・数字キーではtextに入力され、tabキー,上下左右キーでは一覧のActiveフォーカスが動く。同じwindowに対し、2つのフォーカスが同時に存在している? [ メッセージ編集済み 編集者: 未記入 編集日時 2009-02-03 18:22 ] |
|
投稿日時: 2009-02-03 21:59
一応、解決(?)しました。
そもそも、SigmaGridのツールでリスナーを生成しているのが悪いので、 こちらのkeyイベントのリスナーを全て除去しました。 あまり、公開ツールの中身を編集したくないのですが、それほど大きなソースでは無く、 このようにしました。 keyイベントなので、それほど影響があるとは思えませんし、今回の仕様では逆に無い方が良いので。 あまりお勧めはできませんが・・。 ありがとうございました。 |
1