2016-06-09 3 views
1

Может кто-нибудь сказать мне, почему это второе условие выполнения.Почему droppable и draggable jQuery работают не так, как ожидалось?

Вот код

$("#car").draggable({ 
    start: function(event, ui) { 
     if (!done) return false; 
    }, 
    stop: function(event, ui) { 
     if (counter >= 40 && $(".correct").length == $(".drop").length) { 
      setTimeout(function() { 
       $('#win').text(winner +' '+ 'stars' + ' ' + 'earned' + ' Completion time' + ' ' + counter + ' seconds'); 
      } 
     } 
    } 
}); 

// for droppable... 
$("#carDrop").droppable({ 
    accept: "#car", 
    drop: function(event, ui) { 
     if(ui.draggable.is("#car")){ 
      $(this).addClass("correct"); 

      ui.draggable.fadeOut(500); 
      $(this).fadeOut(500,function(){ 

      }); 
     } 
    } 
}); 

Я проверил длину .correct и .drop используя окно предупреждения и длину .correct было 8, а длина .drop было 5. Но когда я перетащить изображение и поместите его то второй оператор if работал, это не имеет смысла. Here is fiddle. Это не работало в скрипке. Я думаю, что у рамки в скрипке есть проблема.

+0

Было бы замечательно, если вы можете быть специфическими для того, что именно вы хотите , вы можете сделать небольшую демонстрацию своей проблемы, а не копировать все коды в jsfiddle .. Я думаю, что все не хотят проходить весь код. По этой причине вы до сих пор не получили ответа –

ответ

0

Не было stop события перетаскиваемого в уволит до тогоdrop событий в сбрасываемых в? Это объясняет, почему нет класса .correct, но при этом этот оператор оценивает значение «undefined» == 'undefined' и, следовательно, true.

+0

Я поставил окно предупреждения после инструкции if и проверил длину обоих классов 8 и 5 – isabel

+0

Я попытался удалить класс добавления в droppable, и оператор if не работает. Это означает, что падение droppable началось первым – isabel

+0

Удивительно, но это уже третий раз, когда я вижу этот же вопрос на этой неделе. Это часть задания? – phreakv6

0

Попробуйте обертывание ваше второе условие в, если заявление в скобках, например:

if (counter >= 40 && ($(".correct").length == $(".drop").length)) { 

Это потому, что $([selector]).length эффективно true

+0

, если оператор все еще работает. Нельзя работать – isabel

+0

, возможно, попробуйте 'console.log ([значения, которые вы хотите проверить])' insteald of alert() '. Это прерывает меньше и позволяет вам смотреть числа по мере их изменения ... – Darvanen

+0

ничего не появляется, когда я использую console.log – isabel