0

私はjQueryが初めてです。このif elseステートメントを実行しようとしていますが、if elseステートメントの半分しか機能していないようです。

$("#og").click(function () {
    if ($('#og').data('clicked')) {
        //#og element clicked run function #1
        $("#about").click(function () {
            $("#about").animate({ 'top': -1130 }, 2000);
            $("#aboutform").animate({ 'top': -1120 }, 2000);
            alert("running click code")
        });
    } else { //#og element not clicked run function #2
        $("#about").click(function () {
            $("#about").animate({ 'top': -1190 }, 2000);
            $("#aboutform").animate({ 'top': -1170 }, 2000);
            alert("running no click code")
        });
    }
});

div(#og) がクリックされたかどうかを確認したい。ある場合は、#about がクリックされたときに #about と #aboutform を位置にアニメーション化する必要があります。#og がクリックされていない場合、#about がクリックされたときに #about と #aboutform を別の位置にアニメーション化する必要があります。

4

6 に答える 6

4

設定$(this).data('clicked', true);すると、クリック値が true かどうかをすぐに確認できます。elseclicked を false に設定したことがないため、2 番目のブロックが発生することはないように見えます。

于 2013-09-13T18:19:23.657 に答える
3

これは私には意味がありません:

$("#og").click(function () { // clicked
    $(this).data('clicked', true); //assign true 
    if($('#og').data('clicked')) { //question if true? you just assigned true to it

これは他に行きません。

于 2013-09-13T18:19:32.807 に答える
2

あなたがやろうとしていることの編集に基づいて、これはより良い解決策になると思います. イベント ハンドラーでイベント ハンドラーをバインドすることは、通常、最善の方法ではありません。

$('#og').click(function() { $(this).data('clicked', true); });

$('#about').click(function() { 
    var aboutTop = -1190;
    var aboutFormTop = -1170;
    if ($('#og').data('clicked')) {
        aboutTop = -1130;
        aboutFormTop = -1120;
    }

    $("#about").animate({ 'top': aboutTop }, 2000);
    $("#aboutform").animate({ 'top': aboutFormTop }, 2000);
});
于 2013-09-13T18:31:11.117 に答える
1

ここで何を達成しようとしているのか正確にはわかりません。#og でクリック イベントをリッスンしているようですが、クリックがあった場合にのみイベントがトリガーされるため、クリックされたデータ属性が何かに​​設定されていることを確認する理由が不明です。

次のようにするだけで十分です。

$('#og').click(function() { // do things on click
});

クリックしなければ発火することはありません。

于 2013-09-13T18:25:14.253 に答える
1

基本的に、コードに論理エラーがあります。

$("#og").click(関数(){});

この関数は、クリック イベントのコールバックです。したがって、ユーザーが要素 #og をクリックすると、この関数が呼び出されます。あなたがしようとしているのは、#og をクリックするためのコールバック関数内でユーザーが #og をクリックしなかったときにコードを実行することです (私は推測します)。それはまったく意味がありません。

ユーザーが #og 要素をクリックするまでいくつかのコードを実行してから、他のコードを実行する方が良いと思います。

于 2013-09-13T18:25:29.687 に答える
1

上記のコードは、$("#og") がクリックされたときにのみ実行されるため、関数 $(this) 内では常に $("#og") になります。$(this) で常に 'clicked' を true に設定しているため、$("#og") を含む条件は常に true になります。

于 2013-09-13T18:20:37.733 に答える