私はthickboxを使ってhtmlをロードします。このhtmlには、データベースに何かを追加する必要があるフォームがあります。メインのhtml(thickboxをロードするもの)に選択ボックスがあります。私がやりたいことは、シックボックスの閉じるボタンを押したときに、データベースに追加したばかりのもので選択ボックスを更新する必要があることです。シックボックスのクローズメソッドを変更し、選択ボックスを更新するメソッドを呼び出すことを考えていましたが、そうするとシックボックスがクラッシュします。どんなヒントでも大歓迎です。
2 に答える
tb_remove 関数全体を「ハイジャック」することもできます。これは、リンクのクリックだけでなく、ESC キーの押下もキャプチャすることを意味します。
これには、元の remove メソッドの名前をインラインで変更し、それを独自のものに置き換えることが含まれます。
<script type="text/javascript">
var original_tb_remove = tb_remove;
tb_remove = function () {
**** insert your coolness here ****
original_tb_remove();
return false; }
</script>
注: 最大の成功を収めるために、thickbox が最初に呼び出される前に、必ずこれを行ってください。
Firebug を使用してシックボックスの動作を調べると、シックボックス モーダルが実際にはメイン ページ内の div であることがわかります。シックボックスからメインページの任意の関数を呼び出すことができます。
たとえば、次のコードは、thickbox の閉じるリンクを「ハイジャック」し、余分な処理を行います。
$("#TB_closeWindowButton").click(function(){
tb_remove();
//do extra stuffs, such as get a new select
var select_parent = $('#theselect').parent();
$.get('new_select.php',
{},
function(data){
select_parent.html(data);
});
});
シックボックスの閉じるリンクをハイジャックするだけでなく、シックボックス内の任意のリンクにコードを挿入することもできます。tb_remove()
カスタム コードの前または後に、thickbox ウィンドウを閉じるように呼び出してください。フォームの送信が必要な場合は、jQuery フォーム プラグインを使用して AJAX 経由でフォームを送信し、フォームの送信が成功したときに閉じる関数を実行します。
選択ボックスの更新については、すべてのブラウザーで実行する方法について、こちらの回答を参照してください。
関数が常に呼び出されるようにするために、シックボックスを使用modal
モードに設定して、エスケープ キーを無効にすることができます。デフォルトでは、thickbox バーは表示されないため、閉じるコードを忘れずに入力してください。