2014-07-28 5 views
0

내 JS : 표시 내 모달에서왜 내 함수가 부트 스트랩 모달로 많은 시간을 호출합니까?

$("#modalADDpp").on('shown',function(e){ 
    $(this).find('input[type=text]').filter(':first').focus(); 
    var count = 0; 
    alert(count); 
    $('#pp_tab a').click(function() { 
     $(this).tab('show'); 
    }) 
    $("#TenPP").typing({ // jquery for check when finish typing 
     start: function(event ,$elem) { 
      $(".add-on").remove(); 
      return false; 
     }, 
     stop: function (event, $elem) { 
      count ++; 
      alert(count); 
      if(count == 1) 
      { 
       Ajax_Check_Name($elem);// Check name same with database by ajax 
      }  
      return false; 
     }, 
     delay: 500 
    }); 
    $("#modalADDpp").on('hidden',function(e){ 
     $(this).closest('form').find("input[type=text], textarea").val(""); 
     $(".add-on").remove(); 
    }); 
}); 

I 상자에 $ 개수 = 0. 처음에는 괜찮습니다. 하지만 모달을 숨기고 다시 열면 $ count not = 0, $ count now = 2 => 내 함수는 두 번 호출하고, 다시 닫으면 3, 4, 5 번 더 호출합니다.

나는

를 사용하는 경우 (카운트 == 1)

내가 그것을 확인 작업 낭포가 한 번만 실행 싶어하지만 난 문제가 어디 있는지 잘 모릅니다 때문이다. 도움이 필요하다 !!! typing.js의

코드 숨김 또는 정지 기능에 ... 0으로 카운트를 재설정

(function ($) { 

    //-------------------- 
    // jQuery extension 
    //-------------------- 

    $.fn.typing = function (options) { 
     return this.each(function (i, elem) { 
      listenToTyping(elem, options); 
     }); 
    }; 


    //------------------- 
    // actual function 
    //------------------- 

    function listenToTyping(elem, options) { 
     // override default settings 
     var settings = $.extend({ 
      start: null, 
      stop: null, 
      delay: 400 
     }, options); 

     // create other function-scope variables 
     var $elem = $(elem), 
      typing = false, 
      delayedCallback; 

     // start typing 
     function startTyping(event) { 
      if (!typing) { 
       // set flag and run callback 
       typing = true; 
       if (settings.start) { 
        settings.start(event, $elem); 
       } 
      } 
     } 

     // stop typing 
     function stopTyping(event, delay) { 
      if (typing) { 
       // discard previous delayed callback and create new one 
       clearTimeout(delayedCallback); 
       delayedCallback = setTimeout(function() { 
        // set flag and run callback 
        typing = false; 
        if (settings.stop) { 
         settings.stop(event, $elem); 
        } 
       }, delay >= 0 ? delay : settings.delay); 
      } 
     } 

     // listen to regular keypresses 
     $elem.keypress(startTyping); 

     // listen to backspace and delete presses 
     $elem.keydown(function (event) { 
      if (event.keyCode === 8 || event.keyCode === 46) { 
       startTyping(event); 
      } 
     }); 

     // listen to keyups 
     //$elem.keyup(stopTyping); 

     // listen to blurs 
     $elem.blur(function (event) { 
      stopTyping(event, 0); 
     }); 
    } 
})(jQuery); 

답변

0

시도 ...

if(count == 1) 
{ 
    Ajax_Check_Name($elem);// Check name same with database by ajax 
    count = 0; 
} 

또는

$("#modalADDpp").on('hidden',function(e){ 
     $(this).closest('form').find("input[type=text], textarea").val(""); 
     $(".add-on").remove(); 
     count = 0; 
}); 
+0

전 테스트했지만 count = 0이지만 모달이 다시 열리면 여전히 두 번 => count alway = 1 => 함수가 여러 번 호출됩니다. ( – Goben

관련 문제