0

これはIE7/8で動作しない理由を知っていますか?jQueryセレクタがIE7/8で動作しない

drop_area = $('div#drop_area'); 

IE9、FF2/3、およびChromeでは完全に機能します。 Internet Explorerの7/8以下のエラーを与える:

SCRIPT438: Object doesn't support this property or method 

編集:あなたはまた、使用するWebサイト上のjQueryを使用することを、通常 http://pastebin.com/nwxx8RzW

+1

コードのいくつかの他の部分があるかもしれません...残りのコードを投稿できますか? – Chandu

+2

IDが一意であるため、セレクタの 'div'部分は必要ありません。 –

+1

愚かな質問ですが、あなたは 'var drop_area = $( 'div#drop_area');'を試しましたか?また、他のエラーが報告されていますか? [JS Lint](http://jslint.com/)にコードを貼り付けてエラーをチェックしてみましたか? –

答えて

1

pastebinに表示されているコードには、多数のグローバル変数の問題があります。言い換えれば、宣言している変数が範囲内にあると仮定してコーディングしていますが、実際にはグローバルになることが分かります。例としては、彼らが簡単に他の機能の中にカプセル化することができたときに、あなたのすべての関数は、同様の範囲でグローバルであるなどsetbox_handleelementsiiddrop_areaelementrowimage_idが含まれます。

いくつかのコードが他のコードで設定されたハンマーリング(グローバル)データを持っているかどうか、微妙なやりとりがあるかどうかはわかりませんが、何かが上書きされているように見えます。まず、コードを実行してローカル変数にvarを追加することから始めます。次に、このコードのほとんどを匿名の自動実行機能でカプセル化します。

+0

提案に感謝します。私のコードを内部にカプセル化する '匿名自動実行関数'の構文をすぐにデモできますか? –

+0

正直なところ、あなたはすでにドキュメントレディ機能のような適切な機能を使用しています。そこに多くのコードを移動することができます。例えば、ドキュメント準備関数の2番目の文は 'load_elements()'を呼び出します。機能を失うことなく、ドキュメント対応機能内でその機能を簡単に移動できます。等々。提案のおかげで – jmbucknall

+0

ありがとう。私は何かに変数の名前を変更しようとしたと働いた。しかし、 'drop_area'の前にある 'var'キーワードをローカル変数にしようとすると、この同じ問題が発生します。なぜこれが当てはまるのかあなたは考えていますか? –

1

そのエラー・ショー:これは私のjavascriptで行くHTMLですプロトタイプ。だからこそエラーが出るのです(これは実際にPrototypeによって投げられます)。もう一つの可能​​性は、jQueryのlibがHTMLに組み込まれる前に、コードを呼び出そうとしていることです。

それは私の最初の推測ではありませんを確認するために、あなたのJSコードにこのコードを追加:jQueryのが含まれている前

$.noConflict(); 

したがって、プロトタイプをHTMLに含まれていることが重要である:http://api.jquery.com/jQuery.noConflict/

$()をjQuery()で置き換えて動作させると、jQueryとPrototypeを同時に使用するのが最初の問題でした。

+1

をお試しください。私はプロトタイプやその他のJSフレームワークを使用していません2. IE7/8に固有の問題で、他のすべてのWebブラウザでも動作します –

+0

HTMLでは、コードに問題がある可能性があります。ライン自体は私のために絶対に大丈夫です。 – 2ndkauboy

+0

ここで読むことができるように、http://jqueryui.com/demos/droppable/#event-dropあなたは '$(this) 'を使ってdrop_areaを得ることができます。これはIE7/8でうまくいくソリューションかもしれません。実際に良いアイデアは – 2ndkauboy

1

idが 'drop_area'の要素がありますか?すなわち、6/7/8 autoは要素idを使用してdom要素に大域変数を代入します。いくつかのコードが役に立つでしょう。

+0

私はIDがdrop_areaの要素を持っていますが、コードは他のブラウザでもうまく動作するように見えます。私はこれと一緒に私のHTMLを添付します。タンスク! –

+0

http://pastebin.com/nwxx8RzW –

+0

jsで別の名前を使用してみてください。 – redsquare

2

IEには、グローバルスコープ内の一部のプロパティを登録するための奇妙な動作があります。与えられたIDを持つ要素は、IDを使用するだけでアクセスできます。

ですから、ID "drop_area" を持つ要素を持っている、それはこのIDを使用してIEでアクセス可能な、試してみてください。

alert(drop_area.tagName) 

それをチェック..to( "DIV" を与える必要があります)

何が起こるのですか:drop_area = $('div#drop_area');を使用しているときにこの要素に何か他のものを割り当てようとしますが、これはDOMElementに対して無効な操作です。

だから、あなたが作成することを明確にするためにVAR-キーワードを使用して、変数

var drop_area = $('div#drop_area'); 

またはあなたは、関数内でグローバル変数を作成するには、グローバルコンテキストに変数を割り当てる必要が場合:

window['drop_area'] = $('div#drop_area'); 
+0

私は警告(drop_area.tagName)を試してみました。ここでは、varキーワードをショットに割り当てるつもりです –

+0

これは面白いですが、警告はうまく動作しますが、実行しようとしたときに:function on_element_drop(event、ui){ \t console.log(drop_area.tagName); \tコンソール。log(typeofui); \t var drop_area = $( 'div#drop_area');私はエラーがあります:SCRIPT5007: 'tagName'プロパティの値を取得できません:オブジェクトがnullまたは未定義です –

+0

これは、開発者のツールバーのバグである必要があります。ロギング後に変数を代入するので、ロギングするときにエラーは発生せず、DIVを実行する必要があります。さらに、オブジェクトはnullまたは未定義ではなく、jqueryオブジェクトまたはDOMElementです。 –

関連する問題