0

このコードは、ul の途中でクリックされたアンカー タグから ID 'links' を取得し、その ID をページ全体で他の目的に使用することになっていますが、アラートは、'undefined' を取得し続けることを示しています。要素に ID がないかのように。ソース コードを再確認したところ、実際に ID があるため、何が問題なのかわかりません。

$(function() {      
    $('ul#links > li > a').click(function() {

        var planet = $(this).id;
        alert(planet);
        $('#planet').removeClass();
        $('#planet').addClass('planet');

        var bg = 'black url(../img/' + planet + '.jpg) fixed no-repeat center';
        alert(bg);
        $('body').css('background', bg);
    });             
});

また、この Jquery 関数は、この種の状況を処理する Javascript の方法として使用されています。Cookie を設定してユーザーを前のページに戻すクイック スクリプトにリダイレクトされ、その Cookie を使用して新しい CSS を読み込むという PHP ソリューションを既に実装していました。JS が無効になっている場合に、そのメソッドを JS メソッドのバックアップとして使用する方法はありますか?

ページ - http://schnell.dreamhosters.com/folio/

4

3 に答える 3

2

あなたはかなり近かった:

$(function() {      
  $('ul#links > li > a').click(function() {
    var planet = this.id;
    $('#planet').removeClass().addClass("plane");
    var bg = 'black url(../img/' + planet + '.jpg) fixed no-repeat center';
    $('body').css('background', bg);
    return false;
  });             
});

まず、this.idIDを取得します。jQuery の代替手段は$(this).attr("id").

2 つ目は、要素を 2 回検索する手間を省くためにaddClass()、 andを連鎖させることができます。removeClass()これはあなたの問題には必要ありませんが、良い習慣です。

3 番目に、リンクがどこかをトラバースする場合を除き、デフォルト アクションを防止する (evt.preventDefault()コールバックに渡されたイベント オブジェクトを呼び出すことによって) か、単純に終了するreturn false;(これもを行います) 必要がありますevt.stopPropagation()

最後に、あなたが行っていることは、同じことを行うページに移動できるため、Javascript を無効にして作業するのに適しています。Cookie の設定とリダイレクトは気にしません。スクリプト名の URI の場合は、次のように/view/planet.phpします。

<a id="saturn" href="/view/planet.php?planet=saturn">Saturn</a>

同じスクリプト内で実行できます (ここでは PHP を想定しています。何を使用しているかについての言及は見当たりませんでした)。

$planets = array(...);
$planet = $_GET['planet'];
if (in_array($planet, $planets)) {
  echo <<<END
<style type="text/css">
body { background: black url(.../img/$planet.jpg) fixed no-repeat center; }
</style>
END;
}

ページのレンダリング中。

于 2010-01-28T22:24:46.767 に答える
0

要素から jQuery オブジェクトを作成し、そこから ID を取得しようとしています。attr メソッドを使用すれば可能ですが、要素自体から ID を取得する必要があります。

var planet = this.id;

バックアップ方法に関しては、もっともらしく聞こえます。ただし、別のページにリンクする代わりに、何を表示するかを決定するクエリ文字列を使用して同じページにリンクします。

于 2010-01-28T22:22:30.303 に答える
0

$(this).id問題がある場所です...使用$(this).attr('id')

于 2010-01-28T22:23:31.250 に答える