JS ajax + append将相同的HTML多次添加到一个元素

安德烈·布拉托夫(Andre Bulatov)

我已经通过此JavaScript成功实现了大多数所需的功能,但是仍然有一个潜在的麻烦错误,我无法弄清楚:我编写的代码会附加所需的HTML,但会创建不必要的重复项。

问题

该代码会多次添加按钮,而只应添加一次。如何停止倍数?

第(li)个项目以ul的形式显示,就像这样的表格(编号是任意的,我仅将其用作参考):

| 1 | 2 |
| 3 | 4 |
| 5 | 6 |

  • 它给出清单4、1个按钮
  • 它给出清单1,2个按钮
  • 它给出清单2、3按钮

它是从右到左从上到下吗?如果是这样,为什么?


我试图完成的任务:

第1阶段-检查视频,如果有视频,则添加按钮

  1. 检查此类别页面上的产品列表,看看是否有“ .Options”
  2. 如果它们具有.Options,请检查/ Videos /文件夹中是否存在与该产品ID匹配的视频
  3. 如果视频文件夹中存在具有匹配产品ID的视频,请将“播放/停止”切换按钮附加到产品列表中

第2阶段-按下按钮即可播放/停止视频

  1. 如果按下了“播放/停止”按钮,请添加带有相关视频网址的标签
  2. 如果正在播放视频,请在按下按钮时停止并隐藏视频

JavaScript

    $('.videoDemoBtn').on('click', function () {
    if ($(this).hasClass('videoPlaying')) {
        $(this).removeClass('videoPlaying');
        $(this).parent().find('div.categoryDemoVideo').hide().html('');
        }
        else {
            var ProductId = $(this).parent().find('div.ProductImage').attr('data-product');
            $(this).addClass('videoPlaying');
            $(this).parent().find('div.categoryDemoVideo').show().html('<video id="demoVideo" class="video" preload="auto" autoplay="autoplay" loop="loop" autobuffer="autobuffer" muted="muted" controls="controls" width="100%" height="100%" poster="https://store-mixi7d.mybigcommerce.com/content/videos/'+ProductId+'.jpg"><source src="https://store-mixi7d.mybigcommerce.com/content/videos/'+ProductId+'.mp4"><source src="https://store-mixi7d.mybigcommerce.com/content/videos/'+ProductId+'.ogv" type="video/ogg"><p>Your browser does not support this video.  Please upgrade your browser!</p></video>');
                    }
            });
    $(".Options").each(function checkForVideo(url) {
    var ProductCatOpt = $(this);
        ProductId = $(this).parent().parent().find('div.ProductImage').attr('data-product');
    function ajax1() {
        return $.ajax('/content/videos/'+ProductId+'.mp4')
            .done(function() { 
                $(ProductCatOpt).addClass('withVideo');
            }).fail(function() { 
                return;
            });
        }
        $.when(ajax1()).done(function(a1){
            $('.withVideo').closest('li').append('<span class="videoDemoBtn"><div class="triangle"></div></span>');
       });
    });

HTML

    <ul class="ProductList " style="position: relative; height: 1407px;">
        <li class="Odd " style="min-height: 456px; position: absolute; left: 0px; top: 0px;">
            <div class="ProductImage QuickView" data-product="296"> 
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 

                <a href="#someproduct" class="btn Small icon-Choose Options withVideo" title="Choose Options">Choose Options</a></div>

            <!-- Here in the first listing in the ul with class .Options it creates 2 buttons -->               
            <span class="videoDemoBtn"><div class="triangle"></div></span>
            <span class="videoDemoBtn"><div class="triangle"></div></span>
            <!-- Here in the first listing in the ul with class .Options it creates 2 buttons -->               

        </li>
        <li class="Even " style="min-height: 456px; position: absolute; left: 310px; top: 0px;">
            <div class="ProductImage QuickView" data-product="431"> 
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 

                <a href="#someproduct" class="btn Small icon-Choose Options withVideo" title="Choose Options">Choose Options</a></div>

            <!-- While here in the 2nd to last listing in the ul with class .Options it creates 3 buttons -->               
           <span class="videoDemoBtn"><div class="triangle"></div></span>
           <span class="videoDemoBtn"><div class="triangle"></div></span>
           <span class="videoDemoBtn"><div class="triangle"></div></span>
            <!-- While here in the 2nd to last listing in the ul with class .Options it creates 3 buttons -->               

        </li>
        <li class="Odd " style="min-height: 435px; position: absolute; left: 0px; top: 476px;">
            <div class="ProductImage QuickView" data-product="389">         
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 
                <a href="#someproduct" class="btn Small icon-Add To Cart" title="Add To Cart">Add To Cart</a></div>
        </li>
        <li class="Even " style="min-height: 435px; position: absolute; left: 310px; top: 476px;">
            <div class="ProductImage QuickView" data-product="393"> 
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 

                <a href="#someproduct" class="btn Small icon-Choose Options withVideo" title="Choose Options">Choose Options</a></div>

            <!-- And yet ere in the last listing in the ul with class .Options it creates just 1 button -->               
            <span class="videoDemoBtn"><div class="triangle"></div></span>
            <!-- And yet ere in the last listing in the ul with class .Options it creates just 1 button -->               

       </li>
        <li class="Odd " style="min-height: 456px; position: absolute; left: 0px; top: 931px;">
            <div class="ProductImage QuickView" data-product="428"> 
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 
                <a href="#someproduct" class="btn Small icon-Add To Cart" title="Add To Cart">Add To Cart</a></div>
        </li>
        <li class="Even " style="min-height: 456px; position: absolute; left: 310px; top: 931px;">
            <div class="ProductImage QuickView" data-product="388">         
                <div class="categoryDemoVideo"></div>
            </div>
            <div class="ProductActionAdd" style="display:;"> 
                <a href="#someproduct" class="btn Small icon-Add To Cart" title="Add To Cart">Add To Cart</a></div>
        </li>
    </ul>

我在这里做了一个JSFiddle,但这没有帮助,因为必须使用ajax检查的视频必须在同一域中才能正常工作,并且ProductID由我使用的平台的PHP动态生成。

我特别希望停止导致附加多个按钮而不是仅附加1个按钮的行为,但是,如果我的代码草率且效率低下,我不会感到惊讶,因此,请随时批评其中的任何部分。

加布里埃莱·彼得里奥利(Gabriele Petrioli)

要处理动态元素,您需要绑定到预先存在的元素,并将事件处理委托给该元素。

改变

$('.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>');

这样,您只需将元素附加到相关产品,而不是.withVideo页面中的所有元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JS ajax + append将相同的HTML多次添加到一个元素

来自分类Dev

我有一个循环,想用ajax将类添加到最后4个元素中

来自分类Dev

将相同的ajax函数添加到注释列表的最佳方法是什么?

来自分类Dev

Angular.js:根据使用的路线,将一个类添加到范围之外的元素

来自分类Dev

如何使用jQuery或JS将类添加到SVG中最接近的上一个元素?

来自分类Dev

将鼠标悬停在Angular JS的一个元素上并将addClass添加到其他elem

来自分类Dev

Angular.js:根据使用的路线,将一个类添加到作用域之外的元素

来自分类Dev

将鼠标悬停在Angular JS的一个元素上并将addClass添加到其他elem

来自分类Dev

在ajax序列之后将一个按钮添加到复选框的末尾

来自分类Dev

使用ajax将变量从会话添加到另一个会话

来自分类Dev

从Web API AJAX结果中将单击绑定添加到Knockout.js数组

来自分类Dev

使用AJAX从HTML调用.js文件

来自分类Dev

在 AJAX 调用后通过 JS 打印 HTML

来自分类Dev

在 AJAX 调用后通过 JS 打印 HTML

来自分类Dev

将target = _blank添加到JS文件中用于wordpress主题的一个链接

来自分类Dev

如何将一个 JS 对象的数据添加到另一个

来自分类Dev

从另一个表单获取隐藏的表单数据并将其添加到ajax

来自分类Dev

JS-将相同的功能附加到许多html表单

来自分类Dev

将事件添加到使用 ajax 添加的元素?

来自分类Dev

通过Ajax将原始数据添加到dc.js复合图表的简单方法

来自分类Dev

如何将一个数组添加到另一个数组以创建一个数组数组。(JS)

来自分类Dev

如何发出一个ajax请求,以便将其作为JS处理?

来自分类Dev

等待另一个js文件中的ajax调用

来自分类Dev

使用ajax时,如何从js传递一个id到rails?

来自分类Dev

一个ajax中的数据和文件-如何处理JS FormData发送的帖子

来自分类Dev

Ajax + js(无jquery)

来自分类Dev

JS-为从AJAX调用传递的每个元素加载动画

来自分类Dev

JS如何在使用ajax后获取嵌入元素的值

来自分类Dev

js元素如何为加载了Ajax的新htm工作

Related 相关文章

  1. 1

    JS ajax + append将相同的HTML多次添加到一个元素

  2. 2

    我有一个循环,想用ajax将类添加到最后4个元素中

  3. 3

    将相同的ajax函数添加到注释列表的最佳方法是什么?

  4. 4

    Angular.js:根据使用的路线,将一个类添加到范围之外的元素

  5. 5

    如何使用jQuery或JS将类添加到SVG中最接近的上一个元素?

  6. 6

    将鼠标悬停在Angular JS的一个元素上并将addClass添加到其他elem

  7. 7

    Angular.js:根据使用的路线,将一个类添加到作用域之外的元素

  8. 8

    将鼠标悬停在Angular JS的一个元素上并将addClass添加到其他elem

  9. 9

    在ajax序列之后将一个按钮添加到复选框的末尾

  10. 10

    使用ajax将变量从会话添加到另一个会话

  11. 11

    从Web API AJAX结果中将单击绑定添加到Knockout.js数组

  12. 12

    使用AJAX从HTML调用.js文件

  13. 13

    在 AJAX 调用后通过 JS 打印 HTML

  14. 14

    在 AJAX 调用后通过 JS 打印 HTML

  15. 15

    将target = _blank添加到JS文件中用于wordpress主题的一个链接

  16. 16

    如何将一个 JS 对象的数据添加到另一个

  17. 17

    从另一个表单获取隐藏的表单数据并将其添加到ajax

  18. 18

    JS-将相同的功能附加到许多html表单

  19. 19

    将事件添加到使用 ajax 添加的元素?

  20. 20

    通过Ajax将原始数据添加到dc.js复合图表的简单方法

  21. 21

    如何将一个数组添加到另一个数组以创建一个数组数组。(JS)

  22. 22

    如何发出一个ajax请求,以便将其作为JS处理?

  23. 23

    等待另一个js文件中的ajax调用

  24. 24

    使用ajax时,如何从js传递一个id到rails?

  25. 25

    一个ajax中的数据和文件-如何处理JS FormData发送的帖子

  26. 26

    Ajax + js(无jquery)

  27. 27

    JS-为从AJAX调用传递的每个元素加载动画

  28. 28

    JS如何在使用ajax后获取嵌入元素的值

  29. 29

    js元素如何为加载了Ajax的新htm工作

热门标签

归档