
条件付きコンパイルステートメントの/*@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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
javascriptで編集可能不可能の...
-
日本語入力の禁止
-
Strutsで半角英数字1文字以上
-
Vb.netのグローバル変数の宣言...
-
関数でy=g(x)のgとは何の略です...
-
翌月を取得するGASが分かりません
-
JavaScriptで、現在日時から100...
-
cgiでポーリングして取得したデ...
-
java scriptでの表示件数の制御...
-
同じIDで定義した要素の配列を...
-
window.openでタイトル名の指定
-
javascriptでテーブルに追加し...
-
ASP.NET MVCでObjectをjsに渡す
-
ブラウザ、OSによってCSSを使い...
-
JavaScriptで年月日表示のカウ...
-
VC++のちらつき防止方法
-
【正規表現】【javascript】CR...
-
アルファベットABCD…をスマート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
onchangeイベントを使ってspan...
-
javascriptで編集可能不可能の...
-
innerHTML実行後のイベント
-
javascriptの質問です
-
クリックでURLに飛ばすときに、...
-
ボタン上でマウスを押している...
-
別フレームのタグ属性を取得す...
-
DIV内のDIV要素を移動する。
-
HTML:Tableタグに対し、JavaScr...
-
任意の座標をクリックさせるには
-
お気に入り用のボタンを配置し...
-
1つの処理で複数表示させたい
-
WordPressのコンタクトフォーム...
-
指定した数値同士を合計計算し...
-
JavaScriptで文字列の置き換え
-
フォーカスを合わせる
-
div要素内の全input要素をdisable
-
[javascript]DOCTYPE宣言対応に...
おすすめ情報