Php 在原始javascript中加载ajax之后,将事件(使用dynamiac数据)绑定到元素的最佳方法
从ajax响应将html输入容器后,我想将事件绑定到各种元素。我知道这可以通过在插入html后立即运行addEventListener或on+event=function(){}来实现 我的问题是,我不确定使用动态内容执行此操作的最佳方法,而每次传递到事件中的数据都是不同的 例如,将以下html加载到容器中:Php 在原始javascript中加载ajax之后,将事件(使用dynamiac数据)绑定到元素的最佳方法,php,javascript,ajax,html,javascript-events,Php,Javascript,Ajax,Html,Javascript Events,从ajax响应将html输入容器后,我想将事件绑定到各种元素。我知道这可以通过在插入html后立即运行addEventListener或on+event=function(){}来实现 我的问题是,我不确定使用动态内容执行此操作的最佳方法,而每次传递到事件中的数据都是不同的 例如,将以下html加载到容器中: <button id="myButton">go</button> 而$data1、$data2、$data3是带有动态数据的变量。 将此函数绑定到按钮的一种方法
<button id="myButton">go</button>
而$data1、$data2、$data3是带有动态数据的变量。
将此函数绑定到按钮的一种方法是,在将HTML数据插入容器后,输出要计算的脚本,因此HTML输出如下所示:
<button id="myButton">go</button>
<script>document.getElementById('myButton').addEventListener('click',function(){myFunction(<?php echo $data1.','.$data2.','.$data3 ?>)});})</script>
go
document.getElementById('myButton').addEventListener('click',function(){myFunction()});})
我是否可以以更灵活的方式实现上述代码的结果,而不必为每个元素和每个请求输出脚本行
我想到的一种方法是在每个请求完成后调用一个bind函数,在这个函数中,需要事件绑定的每个元素都存储在一个数组中。一个循环遍历数组并绑定适当的事件和函数,但是动态数据会使这变得复杂。有什么想法吗?使用您自己的活动授权形式:
var container = document.getElementById("container");
container.addEventListener("click", function (e) {
e = e || window.event;
var target = e.target || e.srcElement;
if (target.tagName === "BUTTON") {
// execute handler code for buttons
}
}, false);
其中,容器
元素是这些动态元素/按钮在某个级别添加到的最近、稳定(未从DOM中添加/删除)的元素
事件绑定到一个包含元素一次,但是对于从子体中弹出的任何单击
事件(单击
事件的默认行为),都会触发该事件
这只需检查元素的标记名<代码>是否为“按钮”。这是相当广泛的,但如果这是你想要过滤掉的东西,那就是你可以使用的。如果要使用类
,请在动态按钮中添加特定的类
(可能是“特殊类”),并使用:
if (~(" " + target.className + " ").indexOf(" special-class ")) {
// execute handler for buttons with class "special-class"
}
如果需要通过按钮/元素传递特定数据,请在生成按钮时向按钮添加包含该数据的特定data-*
属性:
<button id="whateverId" data-data1="$data1" data-data2="$data2" data-data3="$data3">go</button>
参考:
<button id="whateverId" data-data1="$data1" data-data2="$data2" data-data3="$data3">go</button>
var data1 = target.getAttribute("data-data1");
var data2 = target.getAttribute("data-data2");
var data3 = target.getAttribute("data-data3");