
条件付きコンパイルステートメントの/*@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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクトがぶつかった時の処理
-
cookie を利用して 別ページへ...
-
javascriptで自動計算フォーム...
-
javascriptの記述の誤りを指摘...
-
javascriptでCSVを呼出しvlookup
-
googlemapsAPIでマーカー表示さ...
-
xml+xslでの変換内容をtextareaへ
-
<a>タグのテキストを取得
-
クッキーによるidとパスワード...
-
javascriptでスロットゲームを...
-
onchangeイベントを使ってspan...
-
javascriptであるボタンを押す...
-
javascript 特定のタグのidの存...
-
Enterで次の入力項目へ進むには?
-
RadioButtonListの表示制御
-
JavaScriptのストップウォッチ...
-
JavaScript window.openで開く...
-
多重配列の定義について。【Ruby】
-
javscript超初心者です。
-
プルダウンでテキストエリア表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
onchangeイベントを使ってspan...
-
任意の座標をクリックさせるには
-
innerHTML実行後のイベント
-
div要素内の全input要素をdisable
-
javascriptを使ったページ内の...
-
onclickを使わずにイベント処理...
-
javascriptで編集可能不可能の...
-
[初心者]javascriptのfor文でな...
-
「エラー:…は宣言されていませ...
-
配列の大括弧と丸括弧はどう違う?
-
Click回数を数え、規定された回...
-
【Tabキー】特定の範囲内だけで...
-
onclickとonkeypressの重複
-
javascriptでCSVを呼出しvlookup
-
HTML:Tableタグに対し、JavaScr...
-
ページ先頭にスムーズに移動(...
-
IE8でdivのcontenteditable=tru...
-
画像の一部を表示
おすすめ情報