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);然后你立即检查点击值是否为真。在我看来,您永远不会看到第二个else区块发生,因为您从未将 clicked 设置为 false。

于 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") 时执行,因此在函数中 $(this) 始终是 $("#og")。由于您总是在 $(this) 上将 'clicked' 设置为 true,因此涉及 $("#og") 的条件将始终为 true。

于 2013-09-13T18:20:37.733 回答
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 回答