2011-01-19 4 views
1

jqueryのuiサイト(link text)と同じ結果のjqueryタブプラグインを使用しています。ajaxを使用してコンテンツを読み込むときにユーザーにフィードバックを表示

問題は、Ajaxリクエストが応答を待っているときにタブのラベルを「読み込み中」に変更したいということです。それをどうすれば達成できますか?

編集:

私が今持っているもの:

<div id="tabs"> 
    <ul> 
    <li><a href="#tabs-1">User Profile</a></li> 
    <li><a href="/User/EditUser/<%: Model.Id %>">Edit</a></li> 
    <li><a href="/User/Delete/<%: Model.Id %>">Delete AccountT</a></li> 
    </ul> 

    <div id="tabs-1"> 
    <% Html.RenderPartial("UserProfile", Model); %> 
    </div> 
</div> 

とJavaScriptに私は次のコードを持っている:私が欲しいもの

<script type="text/javascript"> 
    $(function() { 
    $("#tabs").tabs({ 

    }); 
    }); 
</script> 

のロードメッセージを表示することですアクティブなタブのdiv内にある。

答えて

1

あなたのhrefは、実際のリンクの場合widget docによると、Ajaxは箱の外に動作するはずですが:Ajaxを介して外部コンテンツを取得

ロードメッセージをカスタマイズするには、spinnerオプションを使用することができます の場合は、hrefの値を に設定してタブを開きます。 が応答を待っている間に、 というラベルのラベルが「Loading ...」と変化した後、 がロードされると、 は通常のラベルに戻ります。

<script> 
    $(function() { 
     $("#tabs").tabs({ 
      spinner: "<em>My Loading Msg</em>", 
      ajaxOptions: { 
       error: function(xhr, status, index, anchor) { 
        $(anchor.hash).html(
         "Couldn't load this tab. We'll try to fix this as soon as possible. " + 
         "If this wouldn't be a demo."); 
       } 
      } 
     }); 
    }); 
</script> 
+0

ローディングメッセージは、私が望んでいた場所に正確には行きませんが、これは結果を達成するためのよりクリーンな方法です。 *親指* – dcarneiro

+0

アヤックスが処理している間に、アンカーを含む、あなたの 'li'は' UI-状態processing'クラスを取得します。それでもう少しできるはずです。 あなたは使用してスタイル関連]タブに達成する必要があります(あなたはそれがAJAXロードタブが思って動作させることができることを確認していない)http://kaioa.com/node/93を参照して、対象のCSSプロパティを。 – Olivier

-1

例では、ユーザーが2番目の2つのタブのいずれかをクリックしたときに別のページに移動することを前提にしていますが、次のタブを待っている間に読み込みメッセージを表示します。負荷?

<input type="hidden" id="modelId" value="<%=Model.Id%>" /> 
<div id="tabs"> 
    <ul> 
     <li> 
      <a href="#tabs-1">User Profile</a> 
     </li> 
     <li> 
      <a href="#tabs-2">Edit</a> 
     </li> 
     <li> 
      <a href="#tabs-3">Delete AccountT</a> 
     </li> 
    </ul> 

    <div id="tabs-1"> 
     <% Html.RenderPartial("UserProfile", Model); %> 
    </div> 
    <div id="tabs-2"> 
     <p>Loading, please wait...</p> 
    </div> 
    <div id="tabs-3"> 
     <p>Loading, please wait...</p> 
    </div> 
</div> 

そしてあなたのJavaScriptで、あなたの他のページへのリダイレクトを行うには、このようにそれに何かをやって:

もしそうなら、あなたはそうのような他のタブにロードメッセージを保つことによってそれを行うことができ

$(document).ready(document_ready); 

function document_ready() 
{ 
    $("tabs").bind("tabsselect", onTabSelected); 
} 

function onTabSelected(event, ui) 
{ 
    var modelId = $("#modelId").val(); 
    switch (ui.panel.id) 
    { 
     case "tabs-2": 
      window.location.href = "/User/EditUser/" + modelId; 
      break; 
     case "tabs-3": 
      window.location.href = "/User/Delete/" + modelId; 
      break; 
    } 
} 
+0

ほぼ完璧です。問題は、私は新しいページでそれを開きたくないということです。タブ本文の中にhtmlを表示したい。例:ユーザーが編集をクリックすると、読み込み中のテキスト(ソリューションとまったく同じ)が表示されるはずですが、それを "/ User/EditUser /"コントロールに置き換える必要があります。 – dcarneiro

1

クリックラベルを「読み込み」に設定して、AJAXから応答が返ってくるようにしたい場合は、それを変更してみませんか?

$(function() { 
    $("#tabs").tabs(); 
    $("#tab1").click(function() { 
    $(this).val("Loading..."); 
     $.ajax({ 
     blablabla... 
     success: function() { 
     $("#tab1").val("Tab 1"); 
      } 
     }); 
    }); 

これは、明らかに、各タブで機能するように機能を書き直すことができます。

0

あなたはタブのjquery UIに既に存在していると思います。

リモート コンテンツのロード中にこの文字列のHTMLコンテンツは、タブのタイトルに を示しています。

http://jqueryui.com/demos/tabs/#option-spinner

この情報がお役に立てば幸い!

関連する問題