約260行を含むデータのテーブルがあります。これらの各行は、parentHeaderNameなどの属性によって識別されます。そのテーブルのヘッダーがクリックされると、ヘッダーをajaxload.gifイメージに簡単に変更するjQueryが配置されます。
$('#Header').html('<img src="images/ajaxload.gif"');
次に、を呼び出して260行すべてを切り替えます
$([parentHeaderName=something]).toggle();
残念ながら、ヘッダーをajaxload.gifに変更して正しく実行するコードの部分を取得できません。そのステートメントとtoggleステートメントの両方がすべて同時に実行されているかのようです。つまり、ユーザーにはajaxload.gifが表示されません。画像を表示する唯一の方法は、2つのステートメントの間にalert('...')メッセージを配置することです。明らかに、これは解決策としては望ましくありません。delay()とsetTimeoutを使用してみましたが無駄になりました。私が必要としているのは、トグルの実行前に画像を表示できるようにする、jQueryまたはjavascriptに相当するある種のDoEventsだと思います。
何か案は?
ありがとう、クリス
更新:フィードバックの皆さんに感謝します。実際のコードは次のとおりです。
$('.sixdegreestypeheader').click(function() {
var headerName = $(this).attr("headername");
var jq = "[headername$=" + headerName + "]";
var jq2 = "[parentheadername$=" + headerName + "]";
var originalTextValue = $(jq).text();
var originalHTMLValue = $(jq).html();
if (originalHTMLValue.indexOf("collapse") == -1) {
$(jq).html('<img src="images/collapse.gif" /> ' + originalTextValue);
}
else {
$(jq).html('<img src="images/expand.gif" /> ' + originalTextValue);
}
// alert('break here to act as a DoEvents.') // this forces the image change... but I don't want to have to use an alert to force this
$(jq2).toggle();
return false;
});
(このコードは、実際にはヘッダーをajaxload.gifではなくexpand.gifまたはcollapse.gifに変更します。)
遅延の提案を試しました
$(jq2).delay(500).toggle();
しかし、それは何の助けにもなりませんでした。トグルする必要のある行数が少ない場合(たとえば、最大で約20行)は問題ありません。しかし、場合によっては、束(260など)を非表示にする必要があります。これは、ブラウザーがDOMをくぐり抜けて、すべての非表示を実行するのに数秒かかるかのようです。そのため、私はもともとajaxload.gif画像を使用したいと思っていました。
ありがとう、クリス