2010-11-22 9 views
2

このバグは私を絶対に狂ってしまいます。IE7で<TR>を非表示にすると、jQueryのUIボタンが表示されます。

jQuery 1.4.4を使用して、複雑なテーブル行をフィルタリングしようとしています。

行には、<input type="button" />の要素が含まれており、jQuery UI 1.8.5を使用してスタイルが設定されています。

このスクリーンショットは、検索フィルターが適用されていない行の外観を示しています。 Correct Row layout

これらの行は、AJAXポストコールを介して動的に追加され、テンプレート化後に挿入されます。これはポストコール用のJSコードです。

$.post($.url('Asset/GetSites/'), { assetType: assetType, siteType: siteType }, function (data) { 
    //hide the progress spinner 
    $('.progSpinner').fadeOut(); 
    if (data.error) { 
     ShowErrorBar(); 
     return; 
    } 
    $('#SiteRowTemplate').tmpl(data).appendTo(tbody); 
    $('#assetTable input[type=button]').button(); 

    //tbody.hide().fadeIn(); 

    //trigger a sort 
    $('#assetTable').trigger('update'); 
    $('#assetTable').trigger('sorton', [[[0, 0]]]); 

    $('#pageLbl').text(assetTypeName + ' Assets: ' + siteTypeName); 
}); 

次に、サイトと説明の列に基づいてフィルタリングするための基本的なテキスト入力を使用しています。これが問題の発生場所です。これはそのコードです:

var rows = $('#assetTable tbody tr.assets-site-row'); 
rows.each(function() { 
    var row = $(this); 
    var id = row.attr('id'); 

    if (row.attr('id').toLowerCase().indexOf(val) != -1 || 
    row.children('td').text().toLowerCase().indexOf(val) != -1) { 
     //Search is a match 
     row.show(); 
     $('#details' + id).show(); 
    } 
    else { 
     //Search is not a match 
     row.hide(); 
     $('#details' + id).hide(); 
    } 
}); 

Chrome、IE8、Firefoxでは、これは正しく動作します。検索クエリに含まれない行は正しく隠されていますが、IE7では問題が発生します。 Failed table layout

jQueryのUIボタンが非表示になっていると思われる行に対して正しく表示されないことがわかります。開発者用ツールを開いて、インラインdiplay:noneのスタイルをオフにして、特定の「非表示」の行を切り替えても、行は正しく表示されません。

私は基本的に私の知恵の終わりです。誰でも何か提案がありますか?

答えて

2

このようなランダムな問題は、過去に動的に追加された子どもたちに起こりました。基本的に私は.children().hide();に電話をしてから、親にhideを呼び出さなければなりませんでした。 IEのDOMに子要素が正しくマップされていることがわかりました。

+0

これはすぐに私の問題を解決しました。 –

+0

これは結局私が解決した解決策です。 –

関連する問題