いつもありがとうございます。同じような質問を続けてしまって恐縮です。
3*3のテーブルを生成し、矢印キーによるセル間の移動を許可しつつ、F2キーを押した場合はセル間の移動を禁止し、再度F2キーを押した場合は再びセル間の移動を許可するというスクリプトを組みました。しかし、悪戦苦闘したあげく、結局グローバル変数に頼ってしまいました。これを関数内で定義して管理できるはずなのですがまだ良くわかりません。ご教示のほど、よろしくお願いいたします。
ブラウザ chrome バージョン 43.0.2357.130 (64-bit)
lang
1<html> 2<head> 3<script type="text/javascript"> 4window.onload = setTable; 5 6function setTable() { 7 var out = "<table id='tb' border='1' align='center'>"; 8 for (var i=0; i<3; i++) { 9 out += "<tr>"; 10 for (var j=0; j<3; j++) { 11 out += "<td><input value='"+i+"/"+j+"' onkeydown='moveCell(event, this);' /></td>"; 12 } 13 } 14 document.getElementById("result").innerHTML = out; 15} 16 17// 矢印キーによるセル間の移動を許可するかどうかを監視するグローバル変数(初期値は許可) 18var mv = 'y'; 19 20function moveCell(e, t) { 21 // var mv = 'y'; // 本当は関数内で定義し、'y', 'n' の切り替えをしたいが・・・ 22 var k = e.keyCode; 23 var row = t.parentNode.parentNode.rowIndex; 24 var col = t.parentNode.cellIndex; 25 if ( mv == 'y') { 26 switch (k) { 27 case 37: 28 col = col - 1; 29 tb.rows[row].cells[col].childNodes[0].focus(); 30 break; 31 case 38: 32 row = row - 1; 33 tb.rows[row].cells[col].childNodes[0].focus(); 34 break; 35 case 39: 36 col = col + 1; 37 tb.rows[row].cells[col].childNodes[0].focus(); 38 break; 39 case 40: 40 row = row + 1; 41 tb.rows[row].cells[col].childNodes[0].focus(); 42 break; 43 case 113: // F2キー 44 mv = 'n'; 45 break; 46 } 47 } else if (k == 113 && mv == 'n') { 48 mv = 'y'; 49 } 50} 51</script> 52<body> 53<div id="result"></div> 54</body> 55</html> 56
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/13 12:45