/*@cc_on@*/
条件付きコンパイルステートメントの/*@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またはオブジェクトではありませんというエラーになります。
お礼
ありがとうございます! ご意見を参考に赤色を買うことにしました。 丁寧なご回答ありがとうございました。