分類:[ASP.NET (VB)]
2018/04/13(Fri) 12:49:09 編集(投稿者)
以前、こちらに以下の質問をさせて頂きました件で
カーソル動作の改善をしたいと考えております。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=86861
こちらの解決策にありますように
PageRequestManager のイベントの処理を追加することにより、
ポストバックが発生した動的コントロールにフォーカスをセットして、
カーソルが戻るようになりましたが、もう少しカーソルな動きを
自然にしようと思っています。
そこで、TABキーを入力することによって、
次の動的コントールにカーソルを移動しようと変更しましたが、
TABキー以外を入力でも次のコントールにカーソルが移動してしまいます。
どのようにすればTABキーを入力したときのみ
次のコントールにカーソルが移動するようになるのでしょうか?
申し訳ありませんが、教えてください。
(VB.NET側コード)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'ポストバックの場合
'ページ内のTableコントロールからデータセットを作成
If IsPostBack Then
TextBoxButtonMaking(Table1, 1)
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.TextBoxButtonMaking(Table1, 1)
End Sub
'//////// 動的コントロール作成ルーチン /////
Private Sub TextBoxButtonMaking(ByVal tTable As Table, ByVal No As Integer)
'行数
Dim rowCnt As Integer = 3
'列数
Dim colCnt As Integer = 3
If tTable.Rows.Count > 0 Then
Exit Sub
End If
For j = 1 To rowCnt
Dim tRow As New TableRow()
For i As Integer = 1 To colCnt
AddCellCreate(tRow, j, i, No)
Next i
'テーブルに新しい行を追加
tTable.Rows.Add(tRow)
Next j
End Sub
Private Sub AddCellCreate(ByVal tRow As TableRow, ByVal rowCtr As Integer, ByVal cellCtr As Integer, ByVal TableNo As Integer)
Dim prodID As String = ""
'IDを作成
prodID = TableNo.ToString & "_" & rowCtr & "_" & cellCtr
Dim tCell As New TableCell()
tCell.HorizontalAlign = HorizontalAlign.Center
tCell.Wrap = False
tCell.ViewStateMode = UI.ViewStateMode.Enabled
'TextBoxコを作成
Dim ctrl As New TextBox
ctrl.ID = "txt" & prodID
ctrl.Text = ctrl.ID
ctrl.AutoPostBack = True
ctrl.EnableViewState = True
'セルに追加
tCell.Controls.Add(ctrl)
'行に新しいセルを追加
tRow.Cells.Add(tCell)
End Sub
(JavaScript側コード)
<script type="text/javascript">
var manager;
var postBackElementId;
function pageLoad(sender, args) {
if (args.get_isPartialLoad() === false) {
manager = Sys.WebForms.PageRequestManager.getInstance();
manager.add_initializeRequest(OnInitializeRequest);
manager.add_pageLoaded(OnPageLoaded);
}
}
function OnInitializeRequest(sender, args) {
postBackElementId = args.get_postBackElement().id;
}
function OnPageLoaded(sender, args) {
if (postBackElementId) {
var es = document.getElementsByTagName('*');
for (var i = 0; i < es.length; i++) {
if (es[i].id == postBackElementId) {
setNextFocus(es, i);
}
}
}
}
function setNextFocus(es, cur_pos) {
for (var i = cur_pos + 1; i < es.length; i++) {
var elem = document.getElementById(es[i].id);
if (elem != null) {
elem.focus();
break;
}
}
}
</script>