2014-10-17 5 views
0

조건이 참이면 경고 창이 뜨는 if 문이 있는데 아무 일도 일어나지 않습니다.간단한 JS 문이 작동하지 않는 경우

변수의 값을 가져 오지 못하고 변수가 결과라는 div에 표시되는 것과 같습니다.

JS :

droppables이 시작 된 후에 당신의 상태는 즉시 한 번 실행되는 것 같습니다
$x = 0; 

$(window).load(function() { 
    $(".DragItem").draggable({ 
     revert: 'invalid', 
     helper: "clone" 
    }); 

    $(".drop1").droppable({ 
     accept: '#1', 
     activeClass: 'DropTargetValid', 
     drop: function (ev, ui) { 
      var id = $(ui.draggable).attr("id"); 
      $(ev.target).append(ui.draggable.clone()); 
      $("#" + id).draggable('disable'); 
      $x++; 
      document.getElementById("result").innerHTML = $x; 
     } 
    }); 

    $(".drop2").droppable({ 
     accept: '#2', 
     activeClass: 'DropTargetValid', 
     drop: function (ev, ui) { 
      var id = $(ui.draggable).attr("id"); 
      $(ev.target).append(ui.draggable.clone()); 
      $("#" + id).draggable('disable'); 
      $x++; 
      document.getElementById("result").innerHTML = $x; 
     } 
    }); 

    $(".drop3").droppable({ 
     accept: '#3', 
     activeClass: 'DropTargetValid', 
     drop: function (ev, ui) { 

      var id = $(ui.draggable).attr("id"); 
      $(ev.target).append(ui.draggable.clone()); 
      $("#" + id).draggable('disable'); 
      $x++; 
      document.getElementById("result").innerHTML = $x; 
     } 
    }); 

    $(".drop4").droppable({ 
     accept: '.DragItem', 
     activeClass: 'DropTargetValid', 
     drop: function (ev, ui) { 

      var id = $(ui.draggable).attr("id"); 
      $(ev.target).append(ui.draggable.clone()); 
      $("#" + id).draggable('disable'); 
     } 
    }); 
}); 

if ($x == 3) { 
    // code to be executed if condition is true 
    alert('Well Done'); 
} else { 
    // code to be executed if condition is false 
} 
+3

글쎄, 당신의'if' 절은 당신'(윈도우) 밖에 당신의 변수의 값이 여전히 문이 말한 정확히하고있는 0 –

+0

될 때 실제로, 그것은 전에 실행 .load'로 : * 시동시 여전히 0 * 인 동안 한 번 확인하십시오. 값을 변경하는 각 이벤트 * 후 상태 *를 확인하거나 타이머를 사용하여 정기적으로 상태를 "폴링"해야합니다. –

+0

코드의 용도 *는 무엇입니까? 훨씬 간단한 방법으로이 작업을 수행 할 수 있습니다. 조건에 의한 –

답변

2

. 함수에 넣고 각 drop 콜백에서 해당 함수를 호출하겠습니까?

function checkIfXEqualsThreeYet() { 
    if ($x == 3) { 
     // code to be executed if condition is true 
     alert('Well Done'); 
    } else { 
     // code to be executed if condition is false 
    } 
} 

그리고 당신의 하락 콜백 :

$x++; 
checkIfXEqualsThreeYet(); 

물론 당신이를 단순화 할 수있다. 함수 내에서 x을 증분하는 것, 즉 incrementXAndCheckIfItEqualsThree()을 작성하는 것이 좋습니다. 또한 DOM을 검사하여 카운터를 사용하지 않고 조건이 충족되는지 확인할 수도 있지만 코드를 아는 사람에게만 맡깁니다. 어쨌든 위의 내용은 문제의 해결에 도움이 될 것입니다.

+0

당신은 if 문장을 의미합니까? – Tom

+0

@Tom : 예, 죄송합니다. –

+0

나는이 태그를 외부 스크립트 태그로 옮겨 보려고했다. 같은 결과. while 루프가 필요할 것 같아요? – Tom

0

if statement를 함수로 만들고 fuction을 실행하기위한 버튼을 추가했습니다.

<input type="button" onClick="Result()"> 

function Result(){ 
if($x == 3) { 
    // code to be executed if condition is true 
    alert ('Well Done'); 
} 
else { 
    // code to be executed if condition is false 
} 
} 
+0

일반적인 지침으로, 속성 기반 핸들을 jQuery와 함께 사용하지 마십시오. 그것은 정당한 이유없이 핸들러 코드와 등록을 분리합니다 (그리고 다중 핸들러를 지원하지 않습니다). –

관련 문제