2010-11-26 15 views
0

私はこの質問を以前にも持っていましたが、最初に正しく質問しなかったかもしれないので、ここで2回目の試みです。私は動的なWebページでサイトを作成しています。これらのページの1つには、テーブルの下に3つのアコーディオンがありますが、「ラッピング」と呼ばれる部門に囲まれています。これらのアコーディオンを動的ページの一部として表示するには、「コンテンツ」と呼ばれるDiv I(テスト目的のID名とクラス名の両方)にそれらを含めます。ここで2つのDivs内のJQueryアコーディオンを見つける

は、これらのアコーディオンを含む動的なコンテンツのHTMLセクションです:

<body> 
<form id="form1" runat="server" > 
<div id="content" class="content"> 
    <table style="width: 1200px"> 
     <tr> 
      <td style="width: 800px"> 
       <h1>Title</h1><br /> 
       blah blah 
       </td> 
      </tr> 
    </table> 

    <div id="wrapping" class="wrapping"> 
     <p class="accordionButton"><strong>Service 1</strong></p> 
     <div class="accordionContent"> 
      Item1<br /> 
      Item2<br/> 
     </div> 
     <p class="accordionButton"><strong>Service 2</strong></p> 
     <div class="accordionContent"> 
      Item1<br /> 
      Item2<br /> 
     </div> 
     <p class="accordionButton"><strong>Service 3</strong></p> 
     <div class="accordionContent"> 
      Item1<br /> 
     </div>      
    </div> 
</div> 
</form> 
</body> 

はここで私が使用している全体の関連するjQueryのコードセグメントさ:

$(document).ready(function() { 
    $('.wrapping').find('p.accordionButton').each(function() 
     { alert("found it") }); //Test 

    //ACCORDION BUTTON ACTION  
    $('.wrapping').find('p.accordionButton').mouseover(function() { 
     $('div.accordionContent').slideUp('normal'); 
     $(this).next().slideDown('normal'); 
    }); 

    //HIDE THE DIVS ON PAGE LOAD  
    $(".accordionContent").hide(); 
    }); 

はここに関連付けられているCSSですこのプログラムには、この例には適用されないスタイルがいくつか含まれています。

#load { 
    display: none; 
    position: absolute; 
    right: 10px; 
    top: 10px; 
    background: url(images/ajax-loader.gif); 
    width: 43px; 
    height: 11px; 
    text-indent: -9999em; 
} 

#nav-menu ul 
{ 
    list-style: none; 
    padding: 0; 
    margin: 0; 
} 

#nav-menu li 
{ 
    float: left; 
    margin: 0 0.15em; 
} 

#nav-menu li a 
{ 
    background: url(background.gif) #fff bottom left repeat-x; 
    height: 2em; 
    line-height: 2em; 
    float: left; 
    width: 9em; 
    display: block; 
    border: 0.1em solid #dcdce9; 
    color: #0d2474; 
    text-decoration: none; 
    text-align: center; 
} 

    #nav-menu li a 
{ 
    float: none 
} 

#nav-menu 
{ 
    width:30em 
} 

.accordionButton 
{ 
width: 650px; 
float: left; 
background: #99CC99; 
border-bottom: 1px solid #FFFFFF; 
cursor: pointer; 
text-align: center; 
} 

.accordionContent {  
width: 650px; 
float: left; 
background: #95B1CE; 
display: none; 
} 

質問: 上記のテストステートメントで、ページ上の各アコーディオンボタンを見つけることができます(私は3つのアラート、各accordionButtonに1つのアラートを取得します)が、同じメソッドを使用してマウスオーバーを行うことはできません。何故ですか?

+0

[my test](http://jsfiddle.net/Ff5Lf/)で動作します。それはいくつかの論理エラーがありますが、マウスオーバーが機能します。 – cambraca

+0

@robert、その仕事も私のために働いています... cambracaから提供されたリンク – kobe

+0

mouseoverを私のために働かせることができる唯一の方法は、 "content" divの全体を "wrapping" 1つのdivは、一方が他方の内部にあるのではなく、他方のdivに続く。私が試すことができる何か他にありますか? – Robert

答えて

0

ダイナミックページを有効にしたコードを削除してこの問題を解決しました。これにより、コードが単純化され、複雑さのレベルが取り除かれました。

上記のコードが機能し、私はそれをさらに魅力的にしました。あなたがそれについて興味があるなら、私のtest siteをチェックしてください。

0

マウスオーバーは、私が何をあなたの提示わからないんだけど、MouseEnterイベント

+0

どのようにマウスオーバーが気に入っていますか?あなたは例を挙げることができますか? – cambraca

+0

@カンブラカ、ときどき私はIEのメニューでいくつかのちらつきを経験しました – kobe

+0

マウスオーバーが気になるので、その内部divにマウスを動かすと、2度機能をトリガーすることができます。 あなたが戻った場合、3回目にトリガーされる可能性があります – dovidweisz

0

使用することをお勧めしている非常に風変わりなことができますが、あなたはきっとあなたのマウスオーバー機能に少し微調整を使用することができます。

$('.wrapping').find('p.accordionButton').mouseover(function() { 
    if($(this).next().is(':hidden')){ 
     $('div.accordionContent').slideUp('normal'); 
     $(this).next().slideDown('normal'); 
    } 
}); 

これは、アコーディオンの使いやすさを改善します。意図したときにビューウィンドウを切り替えるだけです。

それとも...多分、この修正を試してみてください。

$('.wrapping').find('p.accordionButton').each(function() { 
    $(this).mouseover(function() { 
     $('div.accordionContent').slideUp('normal'); 
     $(this).next().slideDown('normal'); 
    }); 
}); 
+0

明らかに、これは私のために何もしないので、私のセットアップに何か問題があります。私は現在、以下を使用しています: <スクリプトタイプ= "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"> ここに何か不足していますか? – Robert

+0

このリンクはあなたのために機能しますか? http://impossible2possible.com/so/4287077.php ... jquery 1.4.3があなたのスクリプトを実行するのに使用されました –

+0

その2番目の修正は美しく機能します - 私が内側のDIVを外側のDIVから動かして、それらを連続させる場合にのみ。 (スクラッチヘッド) – Robert

1

私はあなたのprevious questionを見ていたし、この記事ではありませんそこに情報があります。 <div id="content" />を入力するためにjQueryの​​関数を使用しているようです。そうであれば、標準のバインド関数ではなくライブバインディングを使用する必要があります。

.mouseover(function()).bind(mouseover,function())の短い手であり、DOMが最初に生成された後にロードされたコンテンツでは機能しません。その代わりに、​​関数でDOMに追加されたコンテンツを含む.live(mouseover,function())を使用してください。ここで結合ライブの詳細については、次のとおりです。jQuery's .live() handlerあなたが指定した1つ持つ任意の要素にカーソルを合わせると、後者は後者は、起動しますので、あなたが(他の人が述べたように)mouseenterの代わりmouseoverを使用する必要があります。このほかに

要素または子供ごとに1回だけ発生します。私はそれをひどく説明しました - より良い情報とインタラクティブな例のためのリンクはここにあります:jQuery's mouseenter event

私はこれが助けてくれることを願っています!

+0

あなたは私にここで考えることをたくさん与えました。私はこれを使った初心者なので、これを処理して試してみるには数日かかるかもしれません。ありがとう! – Robert

関連する問題