以下のように選択された罫表内のセルの線種を変更するボタンを作りました。
1つのhtmlの時は上手くいっていたのですが、以下のようにボタンと罫表のフレームを分割した所、動かなくなってしまいました。
グローバル変数が引き継がれないみたいなのですが、解決方法ありますでしょうか。
宜しくお願いします。
//メインのhtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="sample_csv2.js"></script>
</head>
<frameset rows="50,*" frameborder="0" border="0">
<frame src="fre1.html" name="f1">
<frame src="fre2.html" name="f2">
</frameset>
</html>
//フレーム1のhtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="sample_csv2.js"></script>
</head>
<body>
<div style="font-size:6.5pt">
線種変更:
<input type="button" value="上2" onclick="chgLine('top','double')" style="font-size:6.5pt"/>
</div>
</html>
//フレーム2のhtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="sample_csv2.js"></script>
</head>
<body>
<table tno=1 style='border:none;border-collapse:collapse'>
<tr>
<td style='width=100.0pt;border:solid windowtext 1.0pt; padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>あいうえお</p>
</td>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>かきくけこ</p>
</td>
</tr>
<tr>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>たちつてと</p>
</td>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>なにぬねの</p>
</td>
</tr>
</table>
</body>
</html>
No.2ベストアンサー
- 回答日時:
> グローバル変数が引き継がれないみたいなのですが、解決方法ありますでしょうか。
A.html
<script src="sample.js"></script>
B.html
<script src="sample.js"></script>
と書いて、sample.jsに書かれたグローバル変数は、A.htmlとB.htmlで共有できるか?
ということでしょうか。
それは「できません」
framesetのHTMLファイルのなか(メインのhtml)で<script>で読み込んでいますので、それに対しては
top.変数名
で共有できます。
それ以外のウインドウの変数は、"top.ウインドウ名.変数名"でアクセスしてください。
top.frames['frameName'].variables と書くとわかりやすいかも知れません。
今回のは関係ありませんが、
window.open()で開いたウインドウの場合はwindow.open()の戻り値やopenerがウインドウ名の代わりになります。
No.4
- 回答日時:
「sample_csv2.js」内を修正するのは面倒そうですね。
talooさんが言うように、無難にフレーム1からフレーム2のJavaScriptを参照して実行する感じが一番かも。
//フレーム1のhtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div style="font-size:6.5pt">
線種変更:
<input type="button" value="上2" onclick="window.top.frames['f2'].chgLine('top','double')" style="font-size:6.5pt"/>
</div>
</html>
かな。
フレーム1ではJavaScriptファイルの読み込みは不要。
そして、フレーム2の「chgLine」を実行するように変更。
詳しい説明は、talooさんの説明通り。
#フレーム2が読み込み済みじゃないと、フレーム1から「chgLine」の実行ができずJavaScriptエラーが発生するなどもある。いずれ考慮してみるといい。
汚いソース見てもらって有難うございました。
必要な所のみ切り出したつもりでしたが、ボロボロでした。。
お陰様で解決できました。
有難うございました。
No.3
- 回答日時:
連続ですみません。
補足です。> と書いて、sample.jsに書かれたグローバル変数は、A.htmlとB.htmlで共有できるか?
> ということでしょうか。
>
> それは「できません」
ページを移動したり、2つのウインドウを開いてそれぞれアドレス欄にURLを入力してページを開いたときは変数を共有することは出来ません。
フレームやwindow.open()を使用したときは、window同志で関連を持っていますので、その変数の利用や関数の実行も可能です。
No.1
- 回答日時:
「sample_csv2.js」内のソースも提示してください。
この回答への補足
すいません、書ききれなかったので
宜しくお願いします。
//******************************************
//グローバル変数
//******************************************
var cellCnt = 0;
var tnoArray = new Array(100);
var rowArray = new Array(100);
var colArray = new Array(100);
window.onload = init;
//******************************************
//初期処理
//******************************************
function init(){
var mouseFlg = 0;
var col;
var row;
var td = document.getElementsByTagName("td");
var length = td.length;
alert('td数:'+length);
for(var i = 0; i < length; i++) {
td[i].onclick = function (){
// this.style.backgroundColor = "#AAA";
if(this.getAttribute("hyou") != "k"){
this.style.backgroundColor = "yellow";
//列番号取得
var befTd = this.previousSibling;
var col = 0;
while(befTd){
if(befTd.nodeName=="TD")col++;
befTd=befTd.previousSibling;
}
//行番号取得
var befTr = this.parentNode.previousSibling;
var row=0;
while(befTr){
if(befTr.nodeName=="TR") row++;
befTr=befTr.previousSibling;
}
//テーブルno取得
var tNo = this.parentNode.parentNode.parentNode.getAttribute("tno");
alert("テーブルno:" + tNo +"列番号:"+col.toString()+" 行番号:"+row.toString());
tnoArray[cellCnt] = tNo;
rowArray[cellCnt] = row;
colArray[cellCnt] = col;
cellCnt = cellCnt + 1;
}
}
}
}
//******************************************
//線種変更
//******************************************
function chgLine( pos , line){
if( cellCnt != 1){
alert("線種の変更はセル1つを選択してください。");
return;
}
var tno = tnoArray[0];
var col = colArray[0];
var row = rowArray[0];
var tableNode = document.getElementsByTagName("table");
//tableを取得
for(var i = 0; i < tableNode.length; i++) {
alert(tableNode[i].getAttribute("tno") + tno);
if(tableNode[i].getAttribute("tno") != tno){
continue;
}
var trNode = tableNode[i].getElementsByTagName("tr");
var trLength = trNode.length;
//trを取得
for(var i = 0; i < trLength; i++) {
if( i == row){
var tdNode = trNode[i].getElementsByTagName("td");
var tdLength = tdNode.length;
//tdを取得
for(var j = 0; j < tdLength; j++) {
var strStyle;
if(line == "solid"){
strStyle = "double windowtext 1.0pt;";
}else if(line == "double"){
strStyle = "double windowtext 3.0pt;";
}else if(line == "bold"){
strStyle = "solid windowtext 2.5pt;";
}else if(line == "dotted"){
strStyle = "dotted windowtext 1.0pt;";
}else if(line == "none"){
strStyle = "none windowtext 1.0pt;";
}
if( j == col){
if(pos == "top"){
tdNode[j].style.borderTop = strStyle;
}else if(pos == "bottom"){
tdNode[j].style.borderBottom = strStyle;
}else if(pos == "left"){
tdNode[j].style.borderLeft = strStyle;
}else if(pos == "right"){
tdNode[j].style.borderRight = strStyle;
}
reset();
}
}
}
}
}
}
汚いソースをソースをべたべたとすいません。。
以下のhtmlでは上手くいっているのですが。
何か分かりますでしょうか。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="sample_csv2.js"></script>
</head>
<body>
<div style="font-size:6.5pt">
線種変更:
<input type="button" value="上2" onclick="chgLine('top','double')" style="font-size:6.5pt"/>
</div>
<table tno=1 style='border:none;border-collapse:collapse'>
<tr>
<td style='width=100.0pt;border:solid windowtext 1.0pt; padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>あいうえお</p>
</td>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>かきくけこ</p>
</td>
</tr>
<tr>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>たちつてと</p>
</td>
<td style='width=100.0pt;border:solid windowtext 1.0pt;padding:0mm 4.95pt 0mm 4.95pt'>
<p style='font-size:10.5pt;mso-bidi-font-size:10.5pt;
font-family:"MS 明朝"'>なにぬねの</p>
</td>
</tr>
</table>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
子フレームの自動リロードは可...
-
フレームでの右クリック禁止
-
HTMLフォームボタンによるター...
-
チェックボックスのチェックを...
-
親ウィンドウの別フレームを子...
-
前のページのurlを取得するには?
-
別ページのインラインフレーム...
-
別フレームの中にあるインライ...
-
写真合成できるフォトフレーム...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
フォーカス移動抑止について
-
SQLのWHEREで全てを質問する方法
-
JavaScriptでiframeの内容を「...
-
SCRIPT5007: 未定義または NULL...
-
別ファイルのfunctionの読み込み方
-
複数のJavascriptを1つのscrip...
-
base64encodeでの文字化けについて
-
JavaScript でキーを送る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
インラインフレームをドラッグ...
-
子フレームの自動リロードは可...
-
submitボタンで他のフレームを...
-
別フレームのページが読み込み...
-
インラインフレームで表示され...
-
セレクトメニューでリンクの際...
-
親ウィンドウの別フレームを子...
-
<iframe>~</iframe>内のwindow...
-
openerは使えないのでしょうか?
-
別ページのインラインフレーム...
-
フレームでの右クリック禁止
-
親フレームからkeydownイベント...
-
onunloadイベントでの画面制御...
-
別フレームにスムーススクロー...
-
ファイルのフォルダの階層の指...
-
左右のフレームを同時にスクロ...
-
他のフレームのスクリプトを実...
-
リロードとの違い
-
別フレームの中にあるインライ...
おすすめ情報