Ok。トムが投稿する前に解決策を見つけました。彼のJQueryindex()関数の使用は素晴らしいです。そのことを前もって知っていたらよかったのに。一方、トムが述べたように、index()は、ページ付けの場合に使用するのが困難または不可能です。以下はThe ROWID Column Method
、
これを2つの回答に分割します。1つはクラシックレポート用、もう1つはIRレポート用です。
以下はCR用です。
1)SQLクエリの最初の列としてROWIDを追加し、そのエイリアス、つまりヘッダーを「」に設定します。従来のレポートでは、列の幅を1に設定し、[列の書式設定]の[CSSスタイル]にを入力しdisplay:none;
ます。
2a)次の非表示アイテムをページに追加します:PX_CURRENT_ROW
、PX_CURRENT_COLUMN
。2b)[次へ]ボタンと[前へ]ボタンが必要な場合は、次のボタンをページに追加します。NEXT
、PREVIOUS
。
3)aページ設定、JavaScript、およびページ読み込み時に実行で、以下を追加します。
bind_validations(); //Tom will note whom I have learned my APEX/JQ tactics from :)
highlight();
3b)ページ設定、JavaScript、および関数と変数の宣言で、3つの関数に次のコードを追加します:identification、highlight、bind_validations。バインドの検証から始めます。バインドの検証では、列のリンクがクリックされたときに列のTDがidentify_row関数に送信されます。レポートのSQLクエリを返すPLSQL関数を使用しているため、JQueryによってIDされるすべての列ヘッダーは汎用COL0xです。通常のクエリを使用している場合は、列ヘッダーで配列を使用します。
function bind_validations() {
var columnHeader = 'COL0';
for (var i = 2; i <10; i++) {
columnHeader = 'COL0' + i;
$("td[headers='" + columnHeader + "']").find('a').each(function(){
$(this).click(function(){
if ($(this).text.length != 0) { //necessary for next/previous buttons
identification(this);
window.location.href=this.href; //necessary for next/previous buttons
}
});
});
}
}
3b)識別機能が登場しました。これにより、前の関数でバインドされたリンクによって関数に渡されたTDで$ x_UpTillを使用して、ページが読み込まれる前に一時的に行が強調表示されます(行がアクティブになることをユーザーに知らせるため、ラグに効果的です)。
function identification(pThis) {
var currentColumn = $x_UpTill(pThis, 'TD');
var currentColumnHeader = $(currentColumn).attr('headers');
var currentRow = $x_UpTill(pThis,'TR');
var currentRownum = $(currentRow).find("td[headers='COL01']").text();
$x_RowHighlight(currentRow, 'pink');
//AJAX
/* As Tom mentions, AJAX is unnecessary: use f?p via column links instead.
In my particular situation, the idiosyncrasies render the passing of values
through f?p inappropriate. The purpose of passing the column header is for
the previous/next buttons, which will activate blank columns otherwise if
everyone of your columns has a link on it.
*/
var get = new htmldb_Get(null, &APP_ID., 'APPLICATION_PROCESS=dummy', &APP_PAGE_ID.);
get.add('PX_CURRENT_COLUMN' , currentColumnHeader);
get.add('PX_CURRENT_ROW', currentRownum);
gReturn = get.get();
get = null;
}
3)cハイライト機能は次のとおりです。
function highlight() {
var currentRownum = $v('PX_CURRENT_ROW')
$("tr").each(function() {
var rownum = $(this).find("td[headers='COL01']").text(); //Use ' ' if you don't have generic columns like I do
if (parseInt(rownum) == parseInt(currentRownum)) $x_RowHighlight(this, 'red');
});
}
4)次に、次および前のボタンに動的アクションを追加します。[次へ]ボタンの場合は、動的アクションを実行します。JavaScriptコードを実行し、ページの読み込み時に起動しないでください。
var currentRownum = $v('PX_CURRENT_ROW');
var currentColumnHeader = $v('PX_CURRENT_COLUMN');
$("tr").each(function() {
var nextRownum = $(this).find("td[headers='COL01']").text();
if (parseInt(nextRownum) == parseInt(currentRownum) + 1) { //use -1 for the previous button
$(this).find("td[headers='" + currentColHeader + "']").find('a').trigger('click');
}
});
前のボタンの場合、条件を次のように変更します。 `if(parseInt(nextRownum)== parseInt(currentRownum)-1)