Foundation5模式中的jQuery图像滑块无法使用动态数据


jQuery image slider in a Foundation 5 modal not working w/ dynamic data

我正在建立一个汽车和汽车零部件网站。这些汽车显示在页面上的样式框中,其中有一张照片和一个简短的描述,所有数据都来自数据库。有一个按钮可以在下拉显示模式中显示所有相应汽车的照片,该模式显示带有缩略图的jQuery照片滑块。

它可以很好地进行硬编码,但每当数据来自对数据库的调用时,图像滑块图像都不会显示在模态中。奇怪的是,如果您将PHP脚本生成的html复制并粘贴到页面中,它会非常好地工作,并且图像会从数据库加载到滑块中。我从Firefox的开发者工具栏复制了生成的HTML,否则它不会显示在常规的"视图源代码"中。这就是问题所在吗?

简单地说,我使用body标记中的onload事件来调用AJAX/PHP,从DB中获取数据,并在它们的框中显示所有的汽车,包括传递给modal的所有属性值:

...data-reveal-id="sliderModal" data-my-name="67camaro/Camaro">

我使用一些jQuery来遍历图像文件夹URL,并在img的基本名称末尾附加一个数字和'.jpg',然后将其推入滑块的img src:

jq("#image0" + i).attr("src", newText) ;

我甚至在上面的代码中使用了$.noConflict(),以确保它与JSSOR的jQuery滑块没有冲突,但无济于事。

我搜索并阅读了所有内容,但没有发现其他有同样问题的人。我还是个新手,在这个问题上我已经达到了极限。显然,有大量的代码带有滑块,超出了限制。

看起来您使用了直接事件而不是委托事件。

直接事件将仅分配给document对象中已经存在的元素,其中作为委托事件,旧元素和任何新添加的元素都将起作用

jq('[data-reveal-id]').on('click', function() { // In this line you are registering direct event handlers
        var targetModal = jq('#' + jq(this).data('revealId'));
        for (var i = 0; i < 10; i++){
            var newText = 'img'/' + jq(this).data('myName') + '0' + i + '.jpg';
                jq("#image0" + i).attr("src", newText) ;
                jq("#thumb0" + i).attr("src", newText) ;              
        }
        for (var i = 9; i < 16; i++){
            var newText = 'img'/' + jq(this).data('myName')  + i + '.jpg';
                jq("#image" + i).attr("src", newText) ;
                jq("#thumb" + i).attr("src", newText);              
        }         
    });

要使用委托事件,您应该更改

jq('[data-reveal-id]').on('click', function() {

jq(document).on('click','[data-reveal-id]', function() { 

您可以将document更改为[data-reveal-id] 的父元素

我发现的另一个错误是,data-my-name中新添加元素的url是错误的

预期的url是68convertible/convert,而您传递的url是/img/68convertible/convert

要了解有关委派事件和on函数的更多信息,请参阅此