2016-09-28 13 views
0

ユーザーがクリックしてからページを変更できるhtmlメニューが必要です。ユーザープロファイルのサイドメニューとクリックに基づいてコンテンツを変更する

<li><a href="" data-box="index"><i class="fa fa-user"></i> My Profile</a></li> 
<li><a href="" data-box="account"><i class="fa fa-edit"></i> Edit Profile</a></li> 
<div class="box index"> 
    @include("partials.profile_index") 
    </div> 
    <div class="box account"> 
    @include("partials.profile_account") 
    </div> 
<script> 

$(document).ready(function(){ 

$('a').click(function(ev){ 
    ev.preventDefault(); 

    // hide everything 
    $('.box').not(
     // except the corresponding box 
     $('.box.'+$(this).data('box')+':hidden').fadeIn() 
    ).fadeOut(); 
}); 

}); 


</script> 

答えて

0

あなたは以下のようにすることができます。デモを確認する - Fiddle Demo

$(document).ready(function(){ 

    $('a').click(function(ev){ 
     ev.preventDefault(); 

     // hide everything 
     var $thisBox = $('.box.' + $(this).data('box')); 
     $('.box').not($thisBox).fadeOut(); 
     if ($thisBox.is(':hidden')) { 
      $thisBox.fadeIn(); 
     } 
    }); 

}); 
+0

最初のリンクしか動作していません。sceondは動作していません。また、すべての「a」をクリックしても影響はありません。 – Alzaabi98

+0

あなたが何について話しているのかよくわかりません。私の答えのデモでは、両方のリンクが正常に動作します。 –

+0

私は立ち往生しています..私は左のプロファイルボタンと右のコンテンツを探しています..コンテンツはサーバからのデータを持っているはずです..たとえば..アカウント情報..写真...請求情報... ect ...私はlaravelをlangとして使用しています。 – Alzaabi98

1

あなたのコードを少し整理し、説明のためにいくつかのコメントを追加しました。これはあなたのために機能し、将来のデバッグにも役立ちます。最後に、ボックスのアニメーションが完成した後に受信ボックスアニメーションが発生することを確認しました。 See this fiddle

$(document).ready(function(){ 

    // hide all boxes by default. 
    $('.box').hide(); 

    // when someone clicks a link, process hiding/showing the correct box 
    $('a').click(function(ev){ 

    // stop the default action for the click event. 
    ev.preventDefault(); 

    // assign a friendly variable for the current box 
    var currentBox = $(this).attr("data-box"); 

    // hide everything except for the box we want to show 
    $('.box').not('.' + currentBox).fadeOut('slow', function() { 

     // after the animation is complete fade in the box we want to show. 
     $('.box.' + currentBox).fadeIn('slow'); 

    }); 

    }); 

}); 
+0

まだ動作しません:最初のものがあります:@include( "partials.profile_index")しかし、2番目のものは動作しません:@include( "partials.profile_account") 他の "a" hrefでも消えます – Alzaabi98

+0

@ Alzaabi98あなたのコードはまだ動作していないのですか?フィドルは私のブラウザで私のために働く。あなたのコードがまだ動作していない場合は、あなたの現在のバージョンのフィドルであなたの投稿を更新してください。どうぞご覧ください。 –

+0

あなたのコードは正常に動作しています。私のコードで使用したときにのみ動作しません。 – Alzaabi98

1

あなたは書いた:「...をクリックし、ページのコンテンツを変更...」私はあなたがブラウザがページをリロードし、単にJavaScriptでDOMを更新しないようにしたいと仮定するつもりです。私があなたの質問を誤解した場合は、私を許してください。

どのようにこれを処理するかは、リンクに「action」という名前のURL変数を割り当てることです。そのようにしてページをリロードすると、表示するコンテンツがわかります。

コードは、使用しているサーバー側の言語によって異なる場合があります。

<ul> 
    <li><a href="index.cfm?action=myProfile" data-box="index"><i class="fa fa-user"></i> My Profile</a></li> 
    <li><a href="index.cfm?action=editProfile" data-box="account"><i class="fa fa-edit"></i> Edit Profile</a></li> 
</ul> 

次に、あなたはいくつかを提供する:ここで

は、あなたのリンクがどのように見えるかの例だなど、私はCFMLで説明しますが、ロジックは関係なく、あなたがPHPを使用しているかどうかを同じにする必要がありますindex.cfmページのサーバー側ロジックのタイプは、次のようになります。

<!--- does the user want to view his/her profile? ---> 
<cfif action IS "myProfile"> 

    <div class="box index"> 
     @include("partials.profile_index") 
    </div> 

</cfif> 

<!--- does the user want to edit his/her profile? ---> 
<cfif action IS "editProfile"> 

    <div class="box index"> 
     @include("partials.profile_account") 
    </div> 

</cfif> 

このソリューションでは、JavaScriptは必要ありません。目的のページがロードされるときに表示させたいものを記述するURL変数を持つ通常のリンクを作成するだけです。

+0

あなたは正しいかもしれません..この論理を試してみてください – Alzaabi98

関連する問題