条件付きコンパイルステートメントの/*@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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
重複しないくじの作り方がわか...
-
JavaScriptでオブジェクトを取...
-
javascript 特定のタグのidの存...
-
[初心者]javascriptのfor文でな...
-
文字列で条件分岐
-
onclickとonkeypressの重複
-
javascriptであるボタンを押す...
-
タブ画像を切り替えてクッキー保存
-
リンクを新しい窓で開きたい
-
jsファイルを使用して計算した...
-
ホームページ内でのRSS表示の方法
-
配列の大括弧と丸括弧はどう違う?
-
クリックを押した時にリンク先...
-
idを使わずにonclickで自身の要...
-
同じIDで定義した要素の配列を...
-
window.openでタイトル名の指定
-
C#で、ContextMenuStripに動的...
-
Vb.netのグローバル変数の宣言...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
重複しないくじの作り方がわか...
-
任意の座標をクリックさせるには
-
javascriptでCSVを呼出しvlookup
-
innerHTML実行後のイベント
-
HTML:Tableタグに対し、JavaScr...
-
onchangeイベントを使ってspan...
-
WordPressのコンタクトフォーム...
-
appendChildがieだとできない??
-
配列の大括弧と丸括弧はどう違う?
-
JavaScriptでオブジェクトを取...
-
【Tabキー】特定の範囲内だけで...
-
div要素内の全input要素をdisable
-
問題はbind の付いたリスナーを...
-
モーダルダイアログウィンドウ...
-
テキストボックスがブランクの...
-
javascript 特定のタグのidの存...
-
日本語入力の禁止
-
javascriptで編集可能不可能の...
おすすめ情報