이번에는 jquery동적으로 생성된 태그에 events를 바인딩하는 방법과 jquery가 이벤트를 동적으로 생성된 태그에 바인딩할 때 어떤 주의사항이 있는지 알아보겠습니다.
동적으로 생성된 태그에 이벤트를 바인딩하는 것은 사용하기 쉽지 않다는 것을 자주 접합니다. 간단히 테스트하고 요약하면 다음과 같습니다.
<body> <!-- 下面是用纯动态方式生成标签 --> <p id="d2"> 生成a标签 </p> <p id="d3"> <input type="button" value="生成a标签" id="btn" /> </p> </body> <script> $(function(){ $('#btn').bind('click', function(event) { /* 在添加标签的同时给添加的标签绑定点击事件 */ $("<li>Hello</li>").appendTo("#d2"); }); ///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用 $('li').bind('click', function(event) { alert("haha"); ///根本不会触发这个方法 }); }) </script>
버튼을 클릭하면 d2에 li 태그가 추가됩니다. .
그러나 초기화 중에 이렇게 하면 나중에 동적으로 생성될 li 태그를 바인딩하기 위해 바인딩 메서드를 사용하는 것은 유효하지 않습니다. 생성된 li 태그를 클릭해도 아무런 반응이 발생하지 않습니다.
바인드 메소드는 실행 시 이미 존재하는 정적 태그 jq 객체에만 이벤트를 바인딩할 수 있으므로 향후 동적으로 추가되는 태그에는 유효하지 않습니다.
현재 이 문제를 해결하는 방법에는 여러 가지가 있습니다.
방법 1:
<body> <!-- 下面是用纯动态方式生成标签 --> <p id="d2"> 动态生成a标签 </p> <p id="d3"> <input type="button" value="生成a标签" id="btn"/> </p> </body> <script> $(function() { ///点击按钮,给d2动态添加标签 $('#btn').bind('click', function() { /* 在添加标签的同时给添加的标签绑定点击事件 */ $("<li onclick='show()'>Hello</li>").appendTo("#d2"); }); }) function show() { alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己) alert("哈哈"); } </script>
이 방법은 동적 접합 중에 트리거될 기본 js 이벤트를 접합한 다음 이벤트 메서드를 추가하는 것입니다. 스크립트 태그에 있습니다. 이 메소드는 li의 클릭 이벤트를 트리거할 수 있습니다. 그러나 레이블 자체 정보를 인쇄하는 Alert($(this).text())를 사용하려는 경우 결과가 표시되지 않습니다. 라벨이 정적으로 인쇄되더라도 표시되지 않습니다.
이 문제를 해결하려면 다음 두 가지 방법을 사용할 수 있습니다.
방법 2:
<body> <!-- 下面是用纯动态方式生成标签 --> <p id="d2"> 生成a标签 </p> <p id="d3"> <input type="button" value="生成a标签" id="btn"/> </p> </body> <script> $(function(){ $('#btn').bind('click', function(event) { /* 在添加标签的同时给添加的标签绑定点击事件 */ $("<li>Hello</li>").appendTo("#d2").bind('click', function() { /* 显示标签的内容 */ alert($(this).text()); ///这种方式也可以正常打印出 hello }); }); }) </script>
이 방법을 사용하면 위의 문제를 해결할 수 있습니다. 바인드 메소드를 사용하기도 하지만 먼저 대상 태그 객체를 갖고 그 후 바인드 메소드를 호출하므로 사용하기 쉽다는 점에 유의하세요. 그리고 실제로 자신의 정보를 정상적으로 인쇄할 수 있다는 것은 놀라운 일입니다.
방법 3:
<body> <!-- 下面是用纯动态方式生成标签 --> <p id="d1"> 测试静态标签的绑定方法 </p> <br /> <p id="d2"> 动态生成a标签的位置 </p> <p id="d3"> <input type="button" value="生成a标签" id="btn" /> </p> </body> <script> $(function(){ $('#btn').bind('click', function() { /* 在添加标签的同时给添加的标签绑定点击事件 */ $("<li>Hello</li>").appendTo("#d2"); }); ///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用 ///用live方法才好用 $('li').live('click', function() { alert($(this).text());///注意,用live还可以这样写,结果是正常的 alert("haha"); }); ///通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素) $('#d1').live('click', function() {///对于静态和动态创建的标签都好使 alert($(this).text());///注意,用live还可以这样写,结果是正常的.这是非常重要的 alert("haha"); }); }) </script>
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요!
추천 자료:
jQuery가 프레임 가장자리에 닿을 때 튀어오르는 애니메이션 효과를 만드는 방법
jQuery의 isPlainObject() 메서드 사용 방법
위 내용은 jquery에서 동적으로 생성된 태그에 이벤트를 바인딩하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!