我正在建立一个汽车和汽车零部件网站。这些汽车显示在页面上的样式框中,其中有一张照片和一个简短的描述,所有数据都来自数据库。有一个按钮可以在下拉显示模式中显示所有相应汽车的照片,该模式显示带有缩略图的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
函数的更多信息,请参阅此