2

いくつかのメニュー項目のスタイルを設定できるようにするための小さなスクリプトを作成しようとしています(正しいページに送信するためのそれぞれを含むli項目を含む単純なdivを介して実行されます)が、取得していませんどこにもいないので、私は助けを必要としています。

マスターページに次のコードがあります。

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="MILLS001_PAINEL.Site1" EnableTheming="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Title</title>
<script type="text/javascript" src="../js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="../js/menu.js"></script>
<link href="../css/reset.css" rel="Stylesheet" type="text/css" />
<link href="../css/style.css" rel="Stylesheet" type="text/css" />
    <!--[if gte IE 9]>
        <style type="text/css">
            .gradient {
                filter: none;
            }
        </style>
    <![endif]-->

<asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
<div id="banner" class="gradient">
    <div id="menu">
        <ul>
            <li><a href="painel_gestao.aspx">Painel de Gestão</a></li>
            <li><a href="gestao_operacional.aspx">Cockpit Operacional</a></li>
        </ul>
    </div>
    <div id="logo"></div>
</div>
<div>
    <asp:ContentPlaceHolder ID="Placeholder" runat="server">

    </asp:ContentPlaceHolder>
</div>
</body>
</html>

メニューはマスターページで定義されています。これで、特定のクラス(CSSで作成済み)を追加して、メニュー項目にスタイルを追加/削除できるようにするこのスクリプトができました。

$(document).ready(function () {
    $('menu').find('li').hover(function() {
        $(this).addClass("hovered");
    },
        function() {
            $(this).removeClass("hovered");
    });

    $('menu').find('a').click(function(e) {
        alert(e);
        $(this).parent().addClass("active");
    });
 });

なんらかの理由で、エラーは表示されませんが、これを機能させることができません。マスターページの名前マングリングによって問題が発生するため、「[id $ = name]」を使用して名前を参照する必要がある別のスクリプトで問題が発生しましたが、ここではそうではないようです...

誰かが私がここで何が悪いのかを知るのを手伝ってもらえますか?

前もって感謝します

編集

ホバーが機能するようになりましたが、ページの更新後もアクティブなクラスが所定の位置に留まっているように見せることができません(明らかに、ASPのデフォルトの動作)。

4

2 に答える 2

4

あなたがする必要があります:

$('#menu') <-- note the # sign

セレクターで....そうでなければ、問題なく動作するはずです

API リファレンス: jQuery ID セレクター

編集に対処するには:

要素の状態は、ページの読み込み間で自動的に保持されません。ブラウザは「同じ要素」を探して、同じように見せようとはしません。メニューを開いたままにしたい場合は、いくつかのデータを永続化する必要があります (ポストバック データまたは (お勧めします) ブラウザ側の状態の保存 (例localStorage) を介して) を保持し、メニュー コードで手動で処理する必要があります。

ああ....あなたの質問を読み直して、それよりも簡単かもしれないと思います....

ページの読み込み時に、次のようなことができます。

$('[href=' + window.location.path + ']').addClass('active');

window.location.pathセレクターの前に何らかの前処理が必要になる可能性がありますが、余分な url パラメーターと、href 内のパスのバリエーション (およびなど) を./index.html処理するためです。index.htmlただし、属性セレクターで使用できるさまざまなタイプのマッチングに注意して*=ください...つまり、hrefのマッチングがはるかに簡単になる可能性があります...しかし、すべてのコードを書くつもりはありません= 0D

API リファレンス: jQuery 属性セレクター

于 2013-03-06T16:19:22.257 に答える
2

Your selector looks incorrect, looks like your missing the # which notes it's an ID. Should be:

  $('#menu').find('a').click()

And a slightly different approach:

 $('#menu a').click()
于 2013-03-06T16:20:10.577 に答える