2011-12-25 8 views
3

フォームの検証をしていて、Internet Explorerが正常に動作しないことに気付いています(いつものように)。 div要素にテキストとCSSをつけてもう一度削除すると(入力がOKの場合)、エクスプローラは表示をもう一度修正しません。私はテキストが削除されることを意味しますが、空白の行が残っています(br要素があるかのように)。私はソースコードをチェックしてCSSが正しく削除されましたが、表示が正しくありません。どうして?JQuery - Internet ExplorerでCSS属性を正しく削除する方法

他のブラウザに問題はありません。

if(bla) 
    { 
     $("div[bez='avz_kw_err']").eq(index).html("Mindestens 3 Zeichen"); 
     $("div[bez='avz_kw_err']").eq(index).attr("style","color:red; font-size:12px; line-height:12px; position:relative; top:5px; left:25px;"); 
    } 
    else 
    { 
     $("div[bez='avz_kw_err']").eq(index).html(""); 
     $("div[bez='avz_kw_err']").eq(index).attr("") 
    } 

答えて

4

".attr()"を使用してjQuery 1.6以上でスタイルプロパティを設定しないでください。 ".prop()" の代わりに使用します。

$("div[bez='avz_kw_err']").eq(index).prop("") 

"スタイル" プロパティがプロパティです。 IEはその違いについて非常に厄介です。 jQueryでラップされていないDOM要素を直接処理する場合、 "name"、 "id"、 "className"、 "tagName"などのオブジェクトの通常のプロパティとして扱うことには、 ".prop()"を使用します」 - それがすべて本当だ - 私が言ったこの夜 —遅いだから、など

編集 『特にスタイル』プロパティは、文字列の値を持つプロパティではありません。それ自体はオブジェクトなので、FirefoxやIEにはそれを意味づけできません。 "これはIEで動作しないことがあります...

-

$("div[bez='avz_kw_err']").eq(index).each(function() { 
    for (var cssp in this.style) { 
    this.style[cssp] = ''; 
    } 
}); 

編集再び —私は正しい答えを見つけ出すまで、ちょっとギャングが私をupvoting停止:しかし、あなたはすべてのCSSプロパティを攻撃することができます編集少年は奇妙なIEで... OK IE8でこの作品:

$("div[bez='avz_kw_err']").eq(index).each(function() { 
    for (var cssp in this.style) { 
    try { this.style[cssp] = null; } catch (who_cares) {} 
    } 
}); 

それはを使用することが明らかに重要です空の文字列ではなく。いくつかの点で何かを空の文字列に設定すると、IEが数秒間スピンアップして回転してしまいました。

+0

は効果がありませんでした。しかし、これは私が心に留めておくべきもののようです。ありがとう。 – Crayl

+1

本当に??効果は全くありませんか?セレクタが動作していますか?根本的な問題は、jQuery(バージョン1.6以降では古いものを使用していますか?)は、 ".attr()"に "setAttribute()"ネイティブDOMメソッドを使用し、IEはこれを完全に別の名前空間としてDOM要素オブジェクト。 – Pointy

+0

いいえ、どんな場合でも私が試したことはありません。セレクタが正常に動作しており、属性.. urr ..プロパティも正しく削除されます。 JQueryのバージョンは1.7.1です – Crayl

1

を使用すると、変更する属性を指定していないため、.attr("")を使用してもスタイルは削除されません。スタイル属性を消去するには、.attr("style", "")を使用します。

デモ:http://jsfiddle.net/Guffa/tvL42/2/

サイドノート:あなたがHTMLやスタイルを設定するための新しいjQueryオブジェクトを作成する必要はありません、ただの呼び出しをチェーン:

if(bla) { 
    $("div[bez='avz_kw_err']").eq(index) 
    .html("Mindestens 3 Zeichen") 
    .attr("style","color:red; font-size:12px; line-height:12px; position:relative; top:5px; left:25px;"); 
} else { 
    $("div[bez='avz_kw_err']").eq(index) 
    .html("") 
    .attr("style", ""); 
} 
+0

よろしくお願いいたします。しかし、それは問題を解決しません。また、サイドノートに感謝します。 – Crayl

+1

それでは要素全体を隠すのではなく、要素を隠すようにしてください。 '$(" div [bez = 'avz_kw_err'] ")。eq(index).hide();' – Guffa

+0

Wooow !!このように動作します。それを信じることができない、ありがとう:) – Crayl

関連する問題