条件付きコンパイルステートメントの/*@cc_on@*/を使用してaddEventListenerとattachEventを切り替えるという方法を教えてもらいましたが、IEで動作確認をすると、「サポートされていないオブジェクトまたは、メソッドです」といったエラーを返されます。
ifで分けて書いてみるとオブジェクトではないかNULLですといったエラーで返ってきます。
どなたかご存知の方がいらっしゃれば、ご教授いただけると助かります。
教えていただいたソース>selectメニューに応じてdivを変換する
<!--/*@cc_on @*/
var changer = function(evt){
var sel = evt./*@if(1)srcElement @else@*/target /*@end@*/;
changer.set(sel.value);
}
changer.set = function(val){
if(!val) return;
var pa, ch, i, target = this.target;
var reg = new RegExp("\\b" + val + "\\b");
for(i=0; i<target.length; i++){
if(!(pa=document.getElementById(target[i]))) continue;
ch = pa.firstChild;
while(ch){
if(ch.nodeType==1) ch.style.display = reg.test(ch.className)?"":"none";
ch = ch.nextSibling;
}
}
}
changer.init = function(id, ids){
var sel = document.getElementById(id);
if(!sel || sel.nodeName != "SELECT") return;
this.target = ids.split(",");
this.set(sel.value);
★ sel./*@if(1)attachEvent('on' + @else@*/addEventListener(/*@end@*/'change',changer, false);
sel = null;
}
// 引数1:select要素のid
// 引数2:選択表示する対象となる要素(ラッパー)のid(カンマ連結)
changer.init("sel","dir1,dir2");
//-->
★の部分がサポートされていないようです。
ifで書き換えてみたところ
var ie = /*@cc_on@*/false;
if(ie){sel.attachEvent('onchange',changer);}
else{sel.addEventListener('change',changer,false);}
'value'はNULLまたはオブジェクトではありませんというエラーになります。
No.1ベストアンサー
- 回答日時:
どこかで見たような… と思ったら私の回答のようですね。
>教えていただいたソース>selectメニューに応じてdivを変換する
><!--/*@cc_on @*/
↓
<!--
/*@cc_on@*/
(改行のあるなしで変わります)
回答をもう一度ご確認ください。
http://oshiete.goo.ne.jp/qa/6524472.html
fujillin先生!!ありがとうございます。これでいけました。色々と試行錯誤していたのがウソみたいに動作しました。ほんとうにありがとうございます。
No.2
- 回答日時:
#1です。
某所で、このスクリプトだと複数回initを呼び出すと都合が悪くなることを指摘されたのを思い出しました。(失念してました)
なので、応急処置。(init部分を以下にいれかえ)
changer.init = function(id, ids){
var sel = document.getElementById(id);
if(!sel || sel.nodeName != "SELECT") return;
this.target = ids.split(",");
this.set(sel.value);
sel. /*@if(1)attachEvent('on' + @else@*/addEventListener(/*@end@*/ 'change', changer, false);
changer.init = new Function;
}
本来なら複数の呼び出しに対応するべきですが、単に2回目以降を無効にしただけというお粗末な「応急処置」です。
お粗末だけれど、無いよりはよいだろうということで・・・
fujillin先生ありがとうございます。前述の改行の処理で上手く動作してくれましたので、この応急処置の方法は知識として私のEvernote行きとなりました。前回に引き続きご回答いただき、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptで、表示されている...
-
javascriptでCSVを呼出しvlookup
-
【Tabキー】特定の範囲内だけで...
-
ActiveXobjectが作成できない
-
画像をダブルクリックでスムー...
-
javascript の 命令文の記述で...
-
onchangeイベントを使ってspan...
-
<a>タグのテキストを取得
-
DOMMouseScrollを使って特定のI...
-
任意の座標をクリックさせるには
-
javascript 特定のタグのidの存...
-
Enterで次の入力項目へ進むには?
-
モーダルダイアログウィンドウ...
-
JavaScriptによるundefined判定...
-
同じIDで定義した要素の配列を...
-
Linux バイナリ実行できない "...
-
window.openでタイトル名の指定
-
関数でy=g(x)のgとは何の略です...
-
ボタンをクリックすると数が増...
-
google apps scriptの終了のさせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
onchangeイベントを使ってspan...
-
HTML:Tableタグに対し、JavaScr...
-
任意の座標をクリックさせるには
-
モーダルダイアログウィンドウ...
-
Click回数を数え、規定された回...
-
innerHTML実行後のイベント
-
javascript 特定のタグのidの存...
-
[初心者]javascriptのfor文でな...
-
【Tabキー】特定の範囲内だけで...
-
javascriptでスロットゲームを...
-
JavaScriptとcookieを利用して...
-
画像の一部を表示
-
日本語入力の禁止
-
javascriptで、表示されている...
-
javascriptで編集可能不可能の...
-
DIV内のDIV要素を移動する。
-
javascript の 命令文の記述で...
-
重複しないくじの作り方がわか...
おすすめ情報