2013-12-20 2 views
1

처음에는 프로그래밍에 익숙하지 않으므로 부드럽게 다루십시오. 스택 오버플로는 훌륭한 리소스 였으므로 여러분 모두에게 감사드립니다.자바 스크립트/jQuery 팝업 루프 및 추가

이 하나 그래도 난 균열 수 없습니다, 당신은 아마도 암호 같은 제목으로 말할 수있는 것이, 어려운 검색 항목의 ... 어쨌든

, 나는 events.register에서 호출되는 jQuery를 팝업 기능이 제어. 기본적으로 사용자가지도를 클릭 할 때마다 웹 서비스에 요청을 보내고 데이터를 다시 가져온 다음 사용자가 상호 작용할 수있는 양식을 채우고 다시 SQL에 데이터를 저장합니다.

정말 잘 진행됩니다. 나는 그 진보에 만족합니다.

기능 중 하나는 테이블의 값을 변경하는 것입니다. 의도하지 않은 것을 실수로 저장하지 않도록 사용자에게 묻습니다. 새로 고침 후 처음에는 완벽하게 작동하지만 이후에는 매번 다섯 번에 다섯 개의 확인이 차례로 표시 될 때까지 하나의 확인을 추가 한 다음 다시 추가합니다. 일단 사용자가 코드를 클릭하면 코드가 정상적으로 실행되고 예상되는 결과를 얻습니다.

난 단지 그래, 내가 그것을 알아보기 힘들거나 잘못 포맷 된 경우 여기 내 기능, 죄송, 분실하고, 한 번에 확인 전화 (I 생각?)하지만 :

function popup() { 
     j = jQuery.noConflict(); 
     j(document).ready(function() { 
      //open popup 
      j("#detailsform").height(250); 
      j("#detailsform").fadeIn(1000); 
      positionPopup(); 
      document.getElementById("condition").value = getCondition; 
      j("#selCatHead").hide(); 
      j("#cats").hide(); 
      //dispose tree 
      j("#dispose").click(function() { 
       if (confirm("Are you sure?")) { 
        disposetree(); 
       } 
       else { return false; }; 
      }); 
      //save defect 
      j("#savedef").click(function() { 
       saveDef(); 
      }); 
      //fade in defects 
      j("#adddefect").click(function() { 
       j("#detailsform").height(400); 
       j("#selCatHead").fadeIn(1000); 
       j("#cats").fadeIn(1000); 
      }); 
      //fade out popup 
      j("#close").click(function() { 
       j("#detailsform").fadeOut(500); 
      }); 
     });   // close document ready function 

     //position the popup at the center of the page 
     function positionPopup() { 
      if (!j("#detailsform").is(':visible')) { 
       return; 
      } 
      j("#detailsform").css({ 
       left: (j(window).width() - j('#detailsform').width())/2, 
       top: (j(window).width() - j('#detailsform').width())/7, 
       position: 'absolute' 
      }); 
     } // close positionPopup function 

     //maintain the popup at center of the page when browser resized 
     j(window).bind('resize', positionPopup); 

    }; // close popup function 

편집 : 팝업 호출에서 @ jfriend00 덕분에 제거 기능과 핸들러를 해제 할 때마다, 예를 들면 : 다음

function popup() { 
     j = jQuery.noConflict(); 
     j(document).ready(function() { 
      //open popup 
      j("#detailsform").height(250); 
      j("#detailsform").fadeIn(1000); 
      //dispose 
      j("#dispose").off(); 
      j("#dispose").click(function() { 
       disposeClickHandle(); 
      }); 
      //save 
      j("#savedef").off(); 
      j("#savedef").click(function() { 
       saveDef(); 
      }); 
     }); 

과 :

function disposeClickHandle() { 
     if (confirm("Are you sure?")) { 
      disposetree(); 
     } 
     else { return false; }; 
    }; 

답변

1

클릭 핸들러는 한 번만 설치해야합니다. 여러 번 설치하면 여러 번 트리거됩니다.

따라서 popup() 함수를 호출 할 때마다 또 다른 클릭 핸들러가 설치됩니다. 클릭하면 클릭 핸들러가 여러 번 트리거됩니다. 클릭 핸들러 설치를 여러 번 호출하는 함수 외부로 이동하고 처음에 한 번만 호출되는 초기화 함수에 넣어야합니다. 그렇지 않으면 다시 설치하면 클릭 핸들러를 제거 할 수 있습니다. 한 번만 설치하십시오.

+0

답장을 보내 주셔서 감사합니다. @ jfriend00! 시간을 알 수 있습니다. 팝업에서 요소 당 하나의 .click (function())을 의미합니까 아니면 전체 함수에 대해 하나의 합계입니까? 그렇다면 사용자가 클릭 할 때 기반으로 다른 함수를 트리거하는 방법은 무엇입니까? 요소 –

+0

생각해 보니, 균열을 줄이고 되돌릴 수 있습니다. –

+0

@MorganEllingham - 각 요소에 대해'.click (fn)'을 한 번만 호출합니다. 두 번 이상 호출하면, – jfriend00