$ (this) 사용자 정의 jQuery 함수 내에서 작동하지 않습니다.

스티븐 R

moment.js 및 moment-duration-format 플러그인을 사용하여 jQuery 카운트 다운 타이머를 만들었습니다 .

$('div#countdown')함수 내에서 하드 코딩된다. 기능은 여기에 제시된대로 작동합니다. 그러나 하드 코딩 된 참조를 $ (this)로 변경하면 작동하지 않습니다. console.log($this)빈 개체를 반환합니다.

간격이 범위 문제를 일으키는 경우를 대비하여 함수 시작 부분에 $ (this)를 변수로 설정하려고 시도했지만 아무런 차이가 없었습니다.

혼란스러운 부분은 $.fn.xxx = function사용자 지정 jQuery 함수에 대해 이전 에이 정확한 구문을 사용 했으며 $ (this)가 해당 함수에서 잘 작동 했다는 것 입니다. 이 특정 기능에 대한 무언가가 그것을 트립하고 있습니다.

<script>
    $.fn.countdown = function ( seconds, tFormat, stopAtZero ) {
        tFormat = (typeof tFormat !== 'undefined') ? tFormat : 'hh:mm:ss';
        stopAtZero = (typeof stopAtZero !== 'undefined') ? stopAtZero : true;
        var eventTime = Date.now() + ( seconds * 1000 );
        var diffTime = eventTime - Date.now();
        var duration = moment.duration( diffTime, 'milliseconds' );
        var interval = 0;
        var counter = setInterval(function () {
            $('div#countdown').text( moment.duration( duration.asSeconds() - ++interval, 'seconds' ).format( tFormat, { trim: false }) );
            if( stopAtZero && interval >= seconds ) clearInterval( counter );
        }, 1000);
    };

    $('div#countdown').countdown( 30*60, 'mm:ss' );
</script>

<div id="countdown"></div>

편집 : 해결. 기능은 괜찮 았습니다. Div 이후 (또는 Document Load 이후) :: headdesk ::

로리 맥 크로 산

문제는 setTimeout()내부 함수가 외부 함수와 다른 범위 에서 실행 되기 때문 입니다. 따라서 this당신이 기대하는 것이 아닙니다. this참조 를 캐시해야합니다 .

또한 옵션이 포함 된 함수에 객체를 제공하여 로직을 약간 개선 할 수 있습니다. 그런 다음을 사용 $.extend하여 기본값을 제공 할 수 있습니다 . 또한 this사용자가 플러그인을 초기화 할 개체 컬렉션을 제공 할 수 있도록 반복해야합니다 . 이 시도:

$.fn.countdown = function(options) {
  var defaults = {
    seconds: 0,
    tFormat: 'hh:mm:ss',
    stopAtZero: true,
    complete: function() {}
  };
  var settings = $.extend(defaults, options);

  $(this).each(function() {
    var $el = $(this);
    var eventTime = Date.now() + (settings.seconds * 1000);
    var diffTime = eventTime - Date.now();
    var duration = moment.duration(diffTime, 'milliseconds');
    var interval = 0;
    var counter = setInterval(function() {
      $el.text(moment.duration(duration.asSeconds() - ++interval, 'seconds').format(settings.tFormat, {
        trim: false
      }));
      if (settings.stopAtZero && interval >= settings.seconds) {
        clearInterval(counter);
        settings.complete();
      }
    }, 1000);
  });
}

$('div').countdown({
  seconds: 10,
  complete: function() {
    console.log('finished!');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
<div></div>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

jQuery event.PreventDefault가 사용자 정의 함수에서 작동하지 않습니다.

분류에서Dev

: = 연산자가 mysql 함수 내에서 사용자 정의 변수로 작동하지 않습니다.

분류에서Dev

사용자 정의 함수가 vba에서 작동하지 않습니다.

분류에서Dev

setInterval 내부의 사용자 정의 함수가 작동하지 않습니다.

분류에서Dev

$ (this) .each 내부의 사용자 정의 함수에서 작동하지 않습니다.

분류에서Dev

$ (this) .each 내부의 사용자 정의 함수에서 작동하지 않습니다.

분류에서Dev

자바 스크립트 함수 내의 jquery가 작동하지 않습니다.

분류에서Dev

로드 된 다른 jQuery 함수가 작동하더라도 WordPress에서 사용자 정의 jQuery 함수가 작동하지 않음

분류에서Dev

클릭 함수에 2 개의 CSS 클래스를 사용하면 JQuery에서 작동하지 않습니다.

분류에서Dev

Pandas에서 작동하지 않는 사용자 정의 함수

분류에서Dev

함수 내부의 jQuery가 작동하지 않습니다.

분류에서Dev

사용자 지정 지연로드 함수가 데이터를 컨테이너에로드 한 후 jQuery 함수 OnClick이 작동하지 않습니다.

분류에서Dev

Python lxml 사용자 정의 파서가 lxml.etree.parse (...) 함수에서 작동하지 않습니다.

분류에서Dev

사용자 정의 함수가 dplyr 파이프에서 작동하지 않습니다.

분류에서Dev

사용자 정의 함수가있는 window.opener가 Safari에서 작동하지 않습니다.

분류에서Dev

jQuery를 사용하여 SVG 함수에 대한 변수를 정의하고 추가하는 것이 작동하지 않습니다.

분류에서Dev

다른 문서에 대한 Jquery 사용자 정의 이벤트가 작동하지 않습니다.

분류에서Dev

Django 사용자 정의 템플릿 태그의 템플릿에서 JQuery가 작동하지 않습니다.

분류에서Dev

rbind가 사용자 정의 함수 내에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

SQLServer 쿼리의 사용자 정의 함수가 작동하지 않습니다.

분류에서Dev

Nodemailer 사용자 지정 SMTP가 Firebase 함수에서 작동하지 않습니다.

분류에서Dev

사용자 지정 IsAjaxRequest 함수가 MVC 6에서 작동하지 않습니다.

분류에서Dev

append () 함수 내에서 jquery 함수가 작동하지 않습니다.

분류에서Dev

jquery가 둘 이상의 함수에서 작동하지 않습니다.

분류에서Dev

jquery의 onload 함수가 새로 고침에서 작동하지 않습니다.

분류에서Dev

Tomcat의 axis2 내부에서 작동하지 않는 사용자 지정 SQL 함수

분류에서Dev

사용자 지정 jQuery 함수 내에서 함수를 사용하는 방법

분류에서Dev

사용자 정의 함수 (변형) 내에서 예상대로 작동하지 않는 돌연변이

분류에서Dev

.click () jQuery 함수는 하나의 ID에 대해 작동하지만 변수는 작동하지 않습니다.

Related 관련 기사

  1. 1

    jQuery event.PreventDefault가 사용자 정의 함수에서 작동하지 않습니다.

  2. 2

    : = 연산자가 mysql 함수 내에서 사용자 정의 변수로 작동하지 않습니다.

  3. 3

    사용자 정의 함수가 vba에서 작동하지 않습니다.

  4. 4

    setInterval 내부의 사용자 정의 함수가 작동하지 않습니다.

  5. 5

    $ (this) .each 내부의 사용자 정의 함수에서 작동하지 않습니다.

  6. 6

    $ (this) .each 내부의 사용자 정의 함수에서 작동하지 않습니다.

  7. 7

    자바 스크립트 함수 내의 jquery가 작동하지 않습니다.

  8. 8

    로드 된 다른 jQuery 함수가 작동하더라도 WordPress에서 사용자 정의 jQuery 함수가 작동하지 않음

  9. 9

    클릭 함수에 2 개의 CSS 클래스를 사용하면 JQuery에서 작동하지 않습니다.

  10. 10

    Pandas에서 작동하지 않는 사용자 정의 함수

  11. 11

    함수 내부의 jQuery가 작동하지 않습니다.

  12. 12

    사용자 지정 지연로드 함수가 데이터를 컨테이너에로드 한 후 jQuery 함수 OnClick이 작동하지 않습니다.

  13. 13

    Python lxml 사용자 정의 파서가 lxml.etree.parse (...) 함수에서 작동하지 않습니다.

  14. 14

    사용자 정의 함수가 dplyr 파이프에서 작동하지 않습니다.

  15. 15

    사용자 정의 함수가있는 window.opener가 Safari에서 작동하지 않습니다.

  16. 16

    jQuery를 사용하여 SVG 함수에 대한 변수를 정의하고 추가하는 것이 작동하지 않습니다.

  17. 17

    다른 문서에 대한 Jquery 사용자 정의 이벤트가 작동하지 않습니다.

  18. 18

    Django 사용자 정의 템플릿 태그의 템플릿에서 JQuery가 작동하지 않습니다.

  19. 19

    rbind가 사용자 정의 함수 내에서 작동하지 않는 이유는 무엇입니까?

  20. 20

    SQLServer 쿼리의 사용자 정의 함수가 작동하지 않습니다.

  21. 21

    Nodemailer 사용자 지정 SMTP가 Firebase 함수에서 작동하지 않습니다.

  22. 22

    사용자 지정 IsAjaxRequest 함수가 MVC 6에서 작동하지 않습니다.

  23. 23

    append () 함수 내에서 jquery 함수가 작동하지 않습니다.

  24. 24

    jquery가 둘 이상의 함수에서 작동하지 않습니다.

  25. 25

    jquery의 onload 함수가 새로 고침에서 작동하지 않습니다.

  26. 26

    Tomcat의 axis2 내부에서 작동하지 않는 사용자 지정 SQL 함수

  27. 27

    사용자 지정 jQuery 함수 내에서 함수를 사용하는 방법

  28. 28

    사용자 정의 함수 (변형) 내에서 예상대로 작동하지 않는 돌연변이

  29. 29

    .click () jQuery 함수는 하나의 ID에 대해 작동하지만 변수는 작동하지 않습니다.

뜨겁다태그

보관