2011-01-07 14 views
1

私はPHPでcodeigniterフレームワークを使用してHTMLテーブルを生成していますが、jQueryダイアログを開き、その行に固有です。単純にダイアログを開く「詳細情報」タイプのリンクを並べ替えます。HTMLテーブル内の各行にjQueryダイアログを追加するにはどうすればいいですか?

ダイアログボックスのdivをその行に追加し、必要な情報をカプセル化すると、テーブルが分割されます(テーブル内にdivを持つことはできません)。

さらに、未知数のjqueryダイアログ関数を追加する必要があるようです...私は関数のいくつかの並べ替えが必要であると仮定しています。また、ダイアログとIDを開く要素のIDダイアログが関数に渡されるためです。しかし、このようなもののためにjQueryに組み込まれたものがあるはずです。

私は何かが欠けていますか?誰かが私に正しい方向を指摘するヒントを持っていますか?

+0

オンデマンドでただ1つのダイアログを作成し、関連する行に基づいて正しい情報を入力するのはなぜですか?このような_x_ダイアログを作成するのは非常に非効率的です。 –

+0

あなたはダイアログを言うときあなたが考えるもののスクリーンショットまたはURLの例を与えることができますか? – Matrym

答えて

2

埋め込みコードを使用していると仮定しています行のメタデータ、ア・ラ...

<tr data-foo="additional data here" data-bar="even more data">…</tr> 

そして、あなたのJavaScriptで、ちょっとした魔法が.live()と呼ばれる:

$('#your_table .show_dialog').live('click', function(){ 
    var data_for_dialog = { 
    foo: $(this).closest('tr').attr('data-foo'), 
    bar: $(this).closest('tr').attr('data-bar') 
    } 

    show_dialog(data); // your own code to show the dialog 
}); 

<a>タグには、「show_dialog」というクラスがあります。属性の数が多い場合や、改行を含む必要のあるデータが含まれている場合、これはあまり効率的ではありません。これを改善するにはiterating over each attribute<tr>を定義し、自動的にdata-で始まる属性を含めます。しかし、この質問の範囲外です。限りダイアログを示すように、このようなものは十分であろう

function show_dialog(data) { 
    var $dialog = $('#dialog'); 
    for(var attr in data) { 
    $dialog.find("." + attr).html(data[attr]); 
    } 
    $dialog.show(); 
} 

<div id="dialog"> 
    <p class="data-foo"></p> 
    <p class="data-bar"></p> 
</div> 

テストされていないのですが、十分に何が起こっているかを示しなければなりません。

注:HTML5では、「data-」という接頭辞が付いている限り、カスタム属性を定義することができます。したがって、上のすべての箇所に表示されます。

+0

これはHTML 5以外のブラウザでも問題なく動作しますか? – iddimu

+0

全くありません。 HTML5の実際の仕様変更のほとんどは、ブラウザの既存の機能を文書化し、動作を標準化しています。これは、これらの分野の1つです。好きな属性を自由に使うことができますが、データプレフィックスは今後の行動の変化から安全です。 – coreyward

+0

それは素晴らしい作品です!いくつかのわずかな変更を加えましたが、その後完璧に動作します...ありがとう!! – iddimu

1

私はTomalakのコメントに同意して1つのボックスを使用し、その内容を変更します。 あなたがしたいと思っていることをしたいと思えば(あなたのコードを見ることなく)、<td>タグの代わりに<table>タグのダイアログdivを置いているようです。第二に、あなただけのリンクの横のdivを参照することができるダイアログを開くには

<table> 
    <tr> 
    <td> 
     <span class="MoreInfo">More info</span> 
     <div>stuff for dialog</div> 
    </td> 
    </tr> 
</table> 

$(document).ready(function(){ 
    $('.MoreInfo').next().dialog({ autoOpen: false }) 
    $('.MoreInfo').click(function(){ 
     $(this).next().dialog('open'); 
    }); 
}); 

編集:jqueryの台無しに申し訳ありませんが、私はあなたが情報としてJqueryUI Dialog

+0

ありがとうKumu、私はこれが私の必要とまったく同じように動作すると思います...しかし、何かが.click(function(){...私はそれが前のステートメントで正しくダイアログを設定していることを知っています。ページの読み込みが完了したときにそれが発生するのですが、なぜダイアログがクリックで開かれないのかわかりません。そこにアラートを置くと、( 'MoreInfo')が発生します。クリックすると、イベントをキャプチャしていることがわかります。助言がありますか? – iddimu

+0

ああ、はい、私はjQueryUIダイアログを使用しています – iddimu

+0

私はこれを行うことはお勧めしません。あなたは潜在的に何百ものjQuery UIダイアログをドキュメント上で初期化しています。これはパフォーマンスに影響します。言うまでもなく、それはあまり優雅ではありません。 – coreyward

関連する問題