2009-09-04 7 views
1

対応するチェックボックスのリストから要素を削除するイベントハンドラがありますが、これはチェックされていません。チェックボックスのクリックイベントのハンドラでは、最初に私は、チェックボックスのラベルの値をコピーします。なぜIE7はこれらの2つの文字列が等しいと思いませんか?

var label = $(this).next().html(); 

その後、私はリスト項目を反復し、そのラベルにそれらのそれぞれを比較する:

$("#sortable li").each(function() { 
    if ($(this).html() === label) { 
     $(this).remove(); 
    } 
    }); 

Internet Explorer 8とFirefoxでは、これは私が期待しているとおりに動作します。 Internet Explorer 7では、そうではありません。 if文の条件は決して真ではありません。私はここで何が欠けていますか?

リクエストによって、比較される文字列は、「チャージ」と「チャージ」の場合があります。

+1

'==='の代わりに '=='を使用すると動作しますか? – Kip

+1

2つの文字列が何であるかを知るのに役立ちます。 –

+0

==または===では動作しません。 – Rafe

答えて

2

なぜスクリプトデバッガを使用せず、その比較が偽であるのかを正確に見てみませんか? ifにブレークポイントを設定し、変数を監視するだけです。

IE8内部スクリプトデバッガだけで設定して読み取るためにjQuery's data methodを使用する別の方法のJavaScriptランタイム

+0

IE7のIE8デバッガで実行すると、問題が明らかになりました。何らかの理由でIEは文字列の最後にスペースを追加していますが、HTMLソースには含まれていませんが、FirefoxとIE8はそれを追加しません。 – Rafe

+0

私はIE7ブラウザモードを意味しました。 – Rafe

1

デバッグを試しましたか?アラートを使用して2つの値が保持しているものを確認し、関数がIE7で実際に呼び出されていることを確認し、同じタイプであることを確認します。

4
  1. alert(label)alert($(this).html())を試して、比較対象を正確に確認してください。
  2. 私は厳密な比較(===)を使用する理由は何も見ていないので、通常の比較(==)を使用すると恩恵を受ける可能性があります。
  3. あなたがしたいと言っていることを実行する方法として、これはすべてかなり狂っているようです。 IDなどのHTMLコンテンツよりも目的に合ったDOMエレメントを特定することをおすすめします。
+0

私はもちろんalert()関数でデバッグを試みました。文字列は同じです(視覚的に)。もちろん、どちらも同じように(jQueryのhtml()メソッドを使用して)得られます。 – Rafe

+0

要素がある限り、適切なセレクタを使用してください。この場合、IDを使用するより堅牢性が高くなり、愚かな文字列解析の練習をする必要がなくなります。 – Rafe

0

ないここにあなたの直接的な質問への答えが、IE7でスクリプトを実行するために、互換モードに切り替えて、あなたを助けます要素に直接フラグ:もちろん

$(this).next().data("toRemove", true); 

//... 

$("#sortable li").each(function() { 
    if ($(this).data("toRemove")) { 
    $(this).remove(); 
    } 
}); 

、あなたが任意の時点でlabelを操作した場合、これはあなたが望むものではありません。私はこれについて言及しています。.data()は、私があまり聞いていない非常に便利なjQuery機能です。私は1週間前までそれについて知りませんでした。

関連する問題