Below I will share with you a summary of several methods of binding events to dynamically generated tags using jquery. It has a good reference value and I hope it will be helpful to everyone.
I often encounter the difficulty of binding events to dynamically generated tags. I briefly tested and summarized it, and the conclusion is as follows:
<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>
Click the button and a li tag will be added to d2. This is OK.
However, if this is done during initialization, it is invalid to use the bind method to bind the li tag that will be dynamically generated in the future. Clicking the generated li tag will not cause any reaction.
Because the bind method can only bind events to the static label jq object that already exists when it is executed, it is invalid for future dynamically added labels.
At this time, there are several ways to solve this problem:
Method 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>
This method is to splice the native js events to be triggered during dynamic splicing, and then define the event method in the script tag. This method can trigger the click event of li. But if you want to use alert($(this).text()), which prints the label's own information, no results will be displayed. Even if the label is printed statically, it will not be displayed.
To solve this problem, you can use the following two methods.
Method 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>
This method can solve the above problem. Although it also uses the bind method, please note that it first has the target tag object and then calls the bind method, so it is easy to use. And it can actually print its own information normally, which is amazing.
Method 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>
The above is what I compiled for everyone. I hope that in the future It will be helpful to everyone.
Related articles:
How to use the global prompt box component in vue?
How to use front-end search in vue2?
How to pass value from child component to parent component in vue
##
The above is the detailed content of Binding events to dynamically generated tags in jquery (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!