文章内容
2022/5/12 17:28:11,作 者: 黄兵
jQuery bind() 动态绑定无效解决方案
最近帮朋友写一个商城,在使用 jQuery .ajax() 动态生成内容时候,使用 .bind() 绑定,点击却无效。
👇是示例代码:
function checkoutAreaBox1IdAttr() {
// checkout 页面用户选择送货地址动作
$("#province_boxIdAttr .group_item").bind("click", function () {
const csrfToken = $('meta[name=csrf-token]').attr('content');
let getProvinceId = $(this).attr("pid");
$.ajax({
url: "/api/v1/get_city",
type: "POST",
dataType: "json",
data: {"code": getProvinceId},
beforeSend: function (xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrfToken)
}
},
success: function (data) {
console.log(data);
},
})
})
}其中 .group_item 是动态生成的元素,使用 .bind() 点击无效。
解决方案:
我们可以使用 jQuery 的 .delegate(),下面是关于 .delegate() 的解释:
为所有匹配选择器(selector 参数)的元素绑定一个或多个事件处理函数,基于一个指定的根元素的子集,匹配的元素包括那些目前已经匹配到的元素,也包括那些今后可能匹配到的元素。
修改之后的代码如下:
function checkoutAreaBox1IdAttr() {
// checkout 页面用户选择送货地址动作
$("#city_boxIdAttr").delegate(".group_item","click", function () {
const csrfToken = $('meta[name=csrf-token]').attr('content');
let getProvinceId = $(this).attr("pid");
$.ajax({
url: "/api/v1/get_city",
type: "POST",
dataType: "json",
data: {"code": getProvinceId},
beforeSend: function (xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrfToken)
}
},
success: function (data) {
console.log(data);
},
})
})
}通过👆的修改,就可以动态绑定生成的内容,程序就可以正常运行了。
参考资料:
黄兵个人博客原创。
评论列表