2010-12-21 2 views
0

이 동적 요소 실행에 바인딩하는 (또는 죽은) 이벤트 중 하나도 존재하지 않는 이유는 무엇입니까?동적 요소에 대해 라이브 jQuery 이벤트가 실행되지 않습니다.

(function ($) { 
    $.fn.myPlugin = function() { 

    var $filterBox = $("<input type='text'>").live("click", function() { 
     alert("Clicked"); 
    }); 
    this.before($filterBox); // insert into DOM before current element 
    return this; // keep chain 
    }; 
})(jQuery); 

나는 여러 <select> 요소에 myPlugin를 호출하고 있습니다. DOM에 요소를 추가하기 전에 바인딩 한 경우 라이브 플러그인없이 작동 할 것이라고 생각했지만 라이브 이벤트조차도 실행되지 않습니다. 내 요소에 ID가 없기 때문에 그것입니까?


편집 : 다음 중 하나가 작동하지 않습니다

var $filterBox = $("<input type='text'>").bind("click", function() { 
     alert("Clicked"); 
}); 
+0

i가 작동하지 않는 이유는 확실하지. 그러나 라이브는 필요한 셀렉터에 한 번만 호출해야합니다. 귀하의 코드에서 클릭() 충분해야합니다. –

+0

RE : 귀하의 편집. 그건 잘 작동합니다. 사실 그것은 * (* Nick 's) jsfiddle에서 작동합니다. 페이지에 오류가 있습니까? 방화범을 풀 수 있습니까? – Stephen

+0

몇 개의 요소를 플러그인으로 호출하고 있습니까? – SLaks

답변

0

:

(function ($) { 
    $.fn.myPlugin = function() { 
     return this.each(function() { 
      // do stuff 
     }); 
    }; 
})(jQuery); 
1

live 방법은 선택기이 아닌 분리 된 요소와 함께 작동합니다.
정상 (비 live) click 이벤트를 처리 할 수 ​​있으며 정상적으로 작동합니다. (는 이벤트가 발생할 때 선택기에 대한 대상을 확인 이후) 셀렉터를 작동 .live()

+0

작동하지 않습니다. 업데이트 된 질문보기 –

2

, 당신은 ... 당신은 단지 이러한 경우 .click()를 사용해야 요소에 직접 첨부 할 수 없습니다 :

(function ($) { 
    $.fn.myPlugin = function() { 

    var $filterBox = $("<input type='text'>").click(function() { 
     alert("Clicked"); 
    }); 
    this.before($filterBox); // insert into DOM before current element 
    return this; // keep chain 
    }; 
})(jQuery); 

You can try it out here , 또는 .insertBefore()와 약간 짧은 :

(function ($) { 
    $.fn.myPlugin = function() {  
    $("<input type='text'>").click(function() { 
     alert("Clicked"); 
    }).insertBefore(this); 
    return this; 
    }; 
})(jQuery); 

You can test it here.

+0

시도해보십시오. 발화하지 않습니다. –

+1

@FreshCode - 확실하다. 여기에서 테스트 해 보라. http://www.jsfiddle.net/nick_craver/DnSgn/ 내 생각 엔, 당신이 여기있는 것을 엉망으로 만드는 플러그인 외부에 * 다른 것을 가지고있다. –

+0

그래, 그 페이지의 다른 것이 나의 이벤트를 엉망으로 만들고 있다고 생각하지만, 나는 무엇을 알아낼 수 없다. 입력 또는 선택 요소에 영향을주는 다른 실시간 이벤트는 없습니다. –

0

"<input type='text'>"이 유효한 HTML이 아니기 때문에 그럴 수 있습니까? 아직 태그를 닫지 않았습니다. 그러나 jQuery가이를 종료 할 수 없는지 확실하지 않습니다. 서로 대체 전역 변수를 사용하고 this.each(...)와 질문의 각 요소 반복하지 않음으로써 해결

+0

jQuery는 잘못된 코드를 보면서 싫어하지만 jQuery는 아무 문제없이 해결합니다. – Stephen

관련 문제