Javascript jsajax+;将相同的HTML多次追加到一个元素
我已经通过这个JavaScript成功地实现了大部分所需的功能,但仍然有一个潜在的麻烦bug我无法解决:我编写的代码附加了所需的HTML,但创建了不必要的重复项 问题 代码多次附加按钮,而按钮只应附加一次。如何阻止倍数 (li)st项显示在ul样式的表格中,如下所示(编号是任意的,我仅将其用于参考): |1 | 2 |Javascript jsajax+;将相同的HTML多次追加到一个元素,javascript,jquery,ajax,Javascript,Jquery,Ajax,我已经通过这个JavaScript成功地实现了大部分所需的功能,但仍然有一个潜在的麻烦bug我无法解决:我编写的代码附加了所需的HTML,但创建了不必要的重复项 问题 代码多次附加按钮,而按钮只应附加一次。如何阻止倍数 (li)st项显示在ul样式的表格中,如下所示(编号是任意的,我仅将其用于参考): |1 | 2 | |3 | 4 | |5 | 6 | 它给出了清单4,1个按钮 它给出了清单1,2个按钮 它给出了清单2、3个按钮 是从右到左从上到下吗?如果是,为什么? 我试图实现的目标:
|3 | 4 |
|5 | 6 |
- 它给出了清单4,1个按钮
- 它给出了清单1,2个按钮
- 它给出了清单2、3个按钮
我试图实现的目标: 阶段1-检查视频并添加按钮(如果存在视频)
$('.videoDemoBtn')。在('click',函数(){
if($(this).hasClass('videoPlaying')){
$(this.removeClass('videoPlaying');
$(this.parent().find('div.categoryDemoVideo').hide().html(“”);
}
否则{
var ProductId=$(this.parent().find('div.ProductImage').attr('data-product');
$(this.addClass('videoPlaying');
$(this.parent().find('div.categoryDemoVideo').show().html(“您的浏览器不支持此视频。请升级您的浏览器!”);
}
});
$(“.Options”)。每个(函数检查视频(url){
var ProductCatOpt=$(此值);
ProductId=$(this.parent().parent().find('div.ProductImage').attr('data-product');
函数ajax1(){
返回$.ajax('/content/videos/'+ProductId+'.mp4'))
.done(函数(){
$(ProductCatOpt).addClass('withVideo');
}).fail(函数(){
返回;
});
}
$.when(ajax1()).done(函数(a1){
$('.withVideo')。最近('li')。追加('');
});
});
HTML
-
-
-
-
-
-
我已经做了一个测试,但是没有帮助,因为必须使用ajax检查的视频必须在同一个域中才能工作,并且ProductID是由我使用的平台的PHP动态生成的
我特别希望停止导致添加多个按钮而不是仅添加1个按钮的行为,但是,如果我的代码过于草率和低效,我不会感到惊讶,因此请随时批评其中的任何部分。每次收到AJAX响应时,您正在向所有
.videoDemoBtn
元素添加另一个单击处理程序。因此,下次单击其中一个时,它将多次运行处理程序,从而添加HTML的多个副本
您应该在顶层执行所有事件绑定。因为这些是动态添加的元素,所以应该使用事件委派,如中所述
要处理动态元素,您需要绑定到预先存在的元素,并将事件处理委托给该元素 改变
$('.videoDemoBtn').on('click', function () {
到
[更新] 对于重复按钮的问题,您很可能需要更改
$('.withVideo').closest('li').append('<span class="videoDemoBtn"><div class="triangle"></div></span>');
$('.withVideo')。最近('li')。追加('');
到
ProductCatOpt.closest('li')。append('');
通过这种方式,您只需将元素附加到相关产品,而不是页面中的所有
。withVideo
元素。这样我才能正确理解:1。使用on()而不是单击,因为动态添加了已处理的事件。videoDemoBtn 2。将$('.videoDemoBtn')放在()上{…在ajax函数之前。正确吗?还有,我什么时候才能将你的答案标记为正确?因为我对这方面一无所知,我是否先尝试你的答案,然后报告/标记?是的,我认为你理解正确。当你认为你能够正确使用答案时,你应该将其标记为正确。如果你遇到问题,你可以把你的尝试作为问题的补充,我会尽力帮助你应用解决方案
$('.videoDemoBtn').on('click', function () {
$('.ProductList').on('click', '.videoDemoBtn', function () {
$('.withVideo').closest('li').append('<span class="videoDemoBtn"><div class="triangle"></div></span>');
ProductCatOpt.closest('li').append('<span class="videoDemoBtn"><div class="triangle"></div></span>');