2013-09-13 19 views
0

Я новичок в jQuery. Я пытаюсь запустить эту инструкцию if else, но я могу только заставить получить одну половину инструкции if else.jQuery if else statement issue

$("#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 и #aboutform в позицию, когда нажимается #about. Если #og не был нажат, я хочу, чтобы он анимировал #about и #aboutform в другую позицию, когда нажимается #about.

+1

Что именно вы ищете? Пожалуйста, создайте jsfiddle здесь: http://jsfiddle.net –

+1

Исправьте меня, если я ошибаюсь, но это всегда будет оцениваться как 'true', поскольку вы устанавливаете' data' элемента перед условием. – Boaz

+1

Является ли это попыткой переключения функции? – adeneo

ответ

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); 
}); 
+0

Спасибо, Джейсон. Это то, что я пытался сделать. Мне придется изучить это немного больше, чтобы понять это. – ocat

4

вы установили $(this).data('clicked', true);, а затем вы сразу же проверяете, является ли значение клика истинным или нет. Мне кажется, что вы никогда не увидите, что второй блок else случится, так как вы никогда не устанавливали его нажатием на false.

3

Это не имеет смысла для меня:

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

Это не пойдет на другой.

1

Приведенный выше код выполняется только при нажатии кнопки $ ("# og"), поэтому в функции $ (это) всегда $ ("# og"). Поскольку вы всегда устанавливаете 'clicked' в true на $ (this), условие, включающее $ ("# og"), всегда будет истинным.

1

Я не совсем уверен, что вы пытаетесь сделать здесь. Кажется, вы слушаете событие click на #og, однако событие будет запускаться только в том случае, если есть щелчок, поэтому непонятно, почему вы проверяете, какой атрибут данных щелкнул, чтобы быть установленным на что угодно.

Это должно быть достаточно для вас, чтобы просто сделать:

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

Там не будет ни одного случая, когда что-то срабатывает, если он не нажал.

1

Так в основном у вас есть логическая ошибка в коде:.

$ ("# ог") нажмите (функция() {});

Эта функция является обратным вызовом для события click. Поэтому, когда пользователь нажимает на элемент #og, вызывается эта функция. То, что вы пытаетесь сделать, это запустить некоторый код, когда пользователь не нажал #og (я предполагаю) внутри функции обратного вызова для нажатия кнопки #og. Это не имеет никакого смысла.

Я думаю, что лучший подход будет содержать некоторый код, пока пользователь не нажмет на элемент #og, а затем запустит другой код.