2011-03-09 3 views
0

jQuery 플러그인을 개발하려고합니다. 지금까지 작성한 코드 스 니펫은 다음과 같습니다.jQuery 플러그인 개발 및 컨텍스트

var MYNAMESPACE = MYNAMESPACE || {}; 
MYNAMESPACE.MyPlugin = function (inputElement, options) { 
    var element = $(inputElement), 
    oldValue = element.val(), 
    container = null, 

    init = function() { 
     container = $('<div class="container"></div>').hide().insertAfter(element); 

     //the suggest method is called from within the anonymous function 
     //called by getJSON... 
    }, 

    suggest = function (resp) { 
     for (var i = 0; i < len; i++) { 
      var item = $('<div/>') 
       .html('whatever') 
       .mouseover(function (index) { 
        return function() { 
         activateItem(index); 
        }; 
       } (i)); 

      container.append(item); 
     } 
    }, 

    activateItem = function (index) { 
     //container doesn't include those appended items. 
     //why??? 
    }; 

    init(); 
}; 

(function ($) { 
    $.fn.myplugin = function (options) { 
     return new MYNAMESPACE.MyPlugin(this.get(0), options); 
    }; 
} (jQuery)); 

activateItem 함수 내에서 컨테이너에는 하위 항목이 없습니다 !!! 왜 그런가요? 어떤 도움은 매우 극명하게 될 것이다

,

답변

0

container 이미 정의 jQuery를 개체입니다,하지만 당신은 'XXXX'로 재정의된다. 그 값을 넣고 싶을 것 같아요? container.html('xxxx')을 사용해보세요.

.mouseover(function() { 
    container.html('xxxx'); 
    activateItem(i); 
}); 

업데이트 : 좋아, 지금

또한, 당신의 mouseover 기능은 인덱스가 정의되지 않습니다 함수를 (내가 그것을 테스트하지 않은) 반환, 대신이 시도되어 나타납니다 코드를 볼 시간이 있다면 lensuggest 함수 안에 정의되어 있지 않습니다. 나는 모두 demo을 테스트하기 위해 초보적으로 만들었으며 예상대로 작동하는 것 같습니다.

+0

글쎄, 솔직히, 나는 컨테이너 값을 이렇게 수정하지 않을 것이다. 코드에주의를 기울이면 container.append (item)을 사용하여 새로 만든 항목을 컨테이너에 추가합니다. 그건 잘 작동하지만, activateItem 함수 내에서, 나는 최신 수정 conatiner에 액세스해야합니다. 그러나 컨테이너에는 자식 요소가 없습니다 (화면에 그 요소가 표시되기 때문에 그렇습니다). 그러나 activeItem 함수의 container.children(). 길이는 0입니다. 무엇을 잘못 했습니까? – Jack

+0

코드는 입력 한 내용이 올바르지 않습니다. 그런 식으로 i에 액세스 할 수 없습니다. 나는 activateItem 함수에 i 값을 전달하기 위해 클로저가 필요합니다. – Jack

+0

그러면 컨테이너를 'xxxx'로 설정하는 목적은 무엇입니까? – Mottie