2010-04-30 4 views
4

누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 나는 프로그래밍에 초보자가 아니지만, 오늘 밤 기분이 좋아! 증가 할 변수를 늘릴 때마다 그 변수가 적합합니다! 하나를 추가하면 잘 동작하지만, 하나 더 추가하려고하면 2 개를 더 추가하려고합니다. 그리고 나서 디 - 인크 리먼 트 (de-increment)를 시도하면 할당 된 원래의 숫자에서 빼기를 원합니다.jQuery i ++ 및 i- problems

이 나는 ​​시도했다 :

i++; 
i = i+1; 
i = i++; 

아무것도 작동하는 것 같다 없습니다. 그것은 어리석은 실수가되어야합니다.

var dayNum = 30; 
//---------------------------------------------------------------------- 
$.jQTouch({ 
     icon: 'dailyqoteicon.png', 
     statusBar: false, 
     initializeTouch: 'a.touch' 
    }); 

//---------------------------------------------------------------------- 
$(document).ready(function(){ 
    //$(function(){}); 
    $(function(){ 
     $('a.touch').swipe(function(event, info){ 
      //alert("jQTouch swipe event"); 
      //alert(info.direction); 
     }); 
    }); 
    $(function updateVerse(){ 
     //alert("updateVerse called"); 
     $.ajax({ 
      type: "GET", 
      dataType: 'JSON', 
      data: 'day='+ dayNum, 
      url: 'forward.php', 
      success: function(data){ 
       var obj = $.parseJSON(data); 
       $("h2.quote").html(""); 
       $("h3.reference").html(""); 
       $("h2.quote").append(obj.quote); 
       $("h3.reference").append(obj.reference, " ", obj.version); 
       //$("span.version").append(obj.version); 
       //----------------------------------- 
       // JSON string {"id":"1","quote":"For to me, to live is Christ, and to die is gain","reference":"Philippians 1:21","version":"NKJV"} 
      }, 
      error: function(request, error){ 
       alert("problem retrieving json data string"); 
      } 
     }); 
     function addDayNum(){ 
      dayNum = dayNum + 1; 
      //dayNum = dayNum++; 
     } 
     function subDayNum(){ 
      dayNum = dayNum - 1; 
      //dayNum = dayNum--; 
     } 

     $("div#header a.next").tap(function(){ 
      addDayNum(); 
      //dayNum++;// doesn't work at all 
      //dayNum = dayNum + 1;//doesn't work at all 
      updateVerse(); 
      //alert(dayNum); 
      //alert("next clicked"); 
     }); 
     $("div#header a.prev").live('click', function(){ 
      subDayNum(); 
      //dayNum--;//doesn't work at all 
      //dayNum = dayNum - 1;// doesn't work at all 
      updateVerse(); 
      //alert(dayNum); 
      //alert("previous clicked"); 
     }); 
    }); 
}); 
+0

범위 지정 문제 일 가능성이 있습니까? –

+3

또한 ** 왜 지구상에'준비'핸들러 **가 중첩되어 있습니까? –

+0

'.tap()'도 Chrome에서 지저분한 내용으로 깨졌습니다. 여러 번 등록하는 것 같습니다. –

답변

4

jqTouch에 익숙하지 않습니다. 하지만 실제로 링크가 실제로 클릭 될 때마다 클릭 핸들러가 링크에 연결되는 중입니다. 따라서 클릭 할 때마다 N + 1 번 절을 건너 뜁니다.

편집 : 이제 알겠습니다. 귀하의 updateVerse 기능이 있습니다

$("a.next").tap(function(){ 
addDayNum();// doesn't work at all 
//dayNum++;// doesn't work at all 
    //dayNum = dayNum + 1;//doesn't work at all 
updateVerse(); 
//alert(dayNum); 
//alert("next clicked"); 
}); 
$("a.prev").tap(function(){ 
subDayNum();// doesn't work at all 
//dayNum--;//doesn't work at all 
//dayNum = dayNum - 1;// doesn't work at all 
updateVerse(); 
//alert(dayNum); 
//alert("previous clicked"); 
}); 

이 코드는 ONCE을 실행해야하고 tap() 핸들러 마다를 추가하는 것 무슨 일이 일어나고 있는지 당신은 실제로 링크를 누릅니다. 그것이 링크를 누를 때마다 N + 1 절을 건너 뛰는 이유입니다. 클릭 처리기가 호출 될 때

var dayNum = 30; 

//---------------------------------------------------------------------- 
function setupClickHandlers() { 
     $("div#header a.next").tap(function(){ 
      addDayNum(); 
      //dayNum++;// doesn't work at all 
      //dayNum = dayNum + 1;//doesn't work at all 
      updateVerse(); 
      //alert(dayNum); 
      //alert("next clicked"); 
     }); 
     $("div#header a.prev").live('click', function(){ 
      subDayNum(); 
      //dayNum--;//doesn't work at all 
      //dayNum = dayNum - 1;// doesn't work at all 
      updateVerse(); 
      //alert(dayNum); 
      //alert("previous clicked"); 
     }); 
} 

function updateVerse(){ 
     //alert("updateVerse called"); 
     $.ajax({ 
      type: "GET", 
      dataType: 'JSON', 
      data: 'day='+ dayNum, 
      url: 'forward.php', 
      success: function(data){ 
       var obj = $.parseJSON(data); 
       $("h2.quote").html(""); 
       $("h3.reference").html(""); 
       $("h2.quote").append(obj.quote); 
       $("h3.reference").append(obj.reference, " ", obj.version); 
       //$("span.version").append(obj.version); 
       //----------------------------------- 
       // JSON string {"id":"1","quote":"For to me, to live is Christ, and to die is gain","reference":"Philippians 1:21","version":"NKJV"} 
      }, 
      error: function(request, error){ 
       alert("problem retrieving json data string"); 
      } 
     }); 
     function addDayNum(){ 
      dayNum = dayNum + 1; 
      //dayNum = dayNum++; 
     } 
     function subDayNum(){ 
      dayNum = dayNum - 1; 
      //dayNum = dayNum--; 
     } 

} 

$(document).ready(function(){ 
     $.jQTouch({ 
      icon: 'dailyqoteicon.png', 
      statusBar: false, 
      initializeTouch: 'a.touch' 
     }); 

    setupClickHandlers(); 
     $('a.touch').swipe(function(event, info){ 
      //alert("jQTouch swipe event"); 
      //alert(info.direction); 
     }); 

}); 
+0

그것은 확실히 문제입니다. 다시 살펴 본 후에 jQtouch와 아무 관련이 없습니다. 기본적으로'updateVerse()'함수는'$ ("...") .tab (function() {...});'호출하고 있습니다. updateVerse가 호출 될 때마다 * 다른 * 탭/클릭 핸들러가 하이퍼 링크에 연결됩니다. 각 핸들러는 실제로'updateVerse()'를 다시 호출하고 있었다. 따라서 클릭 할 때마다 +1 탭/클릭 핸들러를 링크에 연결했습니다. 핸들러가 jQuery를 사용하여 요소에 연결될 때 누적되므로 이전 핸들러가 지워지지 않는다는 것을 기억해야합니다. – Strelok

+0

와우. 이것은 jQuery를 사용하여 실제로 두 번째 시간입니다. 그것은 다른 것과는 아주 다른 것입니다. 흠, 어쩌면 나는 쉽게 읽을만한 내용을 읽을 책을 찾아야 할 것입니다. 아니면 jQuery 문서를 읽으십시오. 지금은 감사합니다. 정말 고마워요! 상속은 모든 언어로 잘 설명되지 않은 것으로 보이지만 매번 나를 물어 뜯는 것처럼 보입니다. – michael

0

당신은 i = i++을하지 말아야 :

여기에 코드입니다. C에서 이것은 정의되지 않은 동작이며 시퀀스 포인트가없는 변수를 두 번 수정하는 것입니다. 비록 여기서는 적용되지 않는다고 생각합니다.

i++i으로 증가하고 원래 값을 산출합니다. 당신이 i = i++ 말한다면 그래서, 그러므로

i = 4 
print i++ # prints 4 
print i # prints 5 

는, 당신은 다음 i 원래 값을 할당, i의 값을 증가, 말하고있다. 이것은 어리 석다.

더 깊은 문제가있을 수 있다고 생각하지만, 이는 곧바로 내게 달라 붙는 문제 중 하나입니다.

+1

** 오오 그렇습니다. 그는 더 큰 문제를 가지고 있습니다 **, 나를 믿어. –

1

alert()ing을 시도해보십시오 여기

는 같은 코드가 보일 것입니다 것입니다. 브라우저가 끊임없이 작동하지 않아 브라우저가 작동하지 않을 수 있습니다. ++--에서의 시도에는 아무런 문제가 없습니다 (i = i++은 정의되지 않은 동작입니다). Chrome에서는 시각적으로 여러 부분을 업데이트하고 100 % CPU를 사용합니다. 아마도 클릭 처리기가 어떻게 든 재귀 적으로 호출합니다.

+0

이것은 나의 의심이다. –

0

의견에 코드를 게시 할 수는 없겠지요 ... 보통 우리는 사전 태그를 사용합니까 아니면 WYSIWYG 만 사용합니까?

@strelokstrelok 같은 소리가 문제가 될 수 있습니다. 다음은 jQTouch의 실제 tap() 함수입니다. 함수 내부의 매개 변수가 다른 함수입니까? 그 차이점은 무엇입니까?

 $.fn.tap = function(fn){ 
     if ($.isFunction(fn)){ 
      var tapEvent = (jQTSettings.useFastTouch && $.support.touch) ? 'tap' : 'click'; 
      return $(this).live(tapEvent, fn); 
     } else { 
      $(this).trigger('tap'); 
     } 
    }