当我只声明了一个data-*
属性时,该函数运行良好,但如果我的产品(product-image)有多个data-*
属性,则该函数不起作用,换句话说,产品图片未显示,会生成错误的.src
。
总共我有10种图像组合(2种颜色,每种颜色有5种不同的形状)。
我是javascript / jquery的新手。所以非常感谢一些帮助。
<div class="container">
<h2>Product Page</h2>
<div class="product-view">
<img id="myimg" src="img/square_orange_img.jpg" width="372" height="511">
</div>
<div class="options">
<p>Choose a Color:</p>
<ul>
<li><img class="colorbox" data-color="orange" style="background-color:orange;" onclick="changecolor(this)" alt=""></li>
<li><img class="colorbox" data-color="purple" style="background-color:purple;" onclick="changecolor(this)" alt=""></li>
</ul>
<p>Select Shape:</p>
<ul>
<li><img class="shapes" data-shape="square" src="img/square-vertical.png" width="50" height="69" onclick="changeshape(this)" alt=""></li>
<li><img class="shapes" data-shape="round" src="img/round-vertical.png" width="50" height="69" onclick="changeshape(this)" alt=""></li>
<li><img class="shapes" data-shape="classic" src="img/classic-vertical.png" width="50" height="69" onclick="changeshape(this)" alt=""></li>
<li><img class="shapes" data-shape="curved" src="img/curved-vertical.png" width="50" height="69" onclick="changeshape(this)" alt=""></li>
<li><img class="shapes" data-shape="scallop" src="img/scallop-vertical.png" width="50" height="69" onclick="changeshape(this)" alt=""></li>
</ul>
</div>
</div>
<script>
function changecolor(elem) {
var color = elem.getAttribute("data-color");
var shape = elem.getAttribute("data-shape");
var newImageSrc = "img/" + shape + "_" + color + "_" + "img.jpg";
document.getElementById("myimg").src = newImageSrc;
}
function changeshape(elem){
var color = elem.getAttribute("data-color");
var shape = elem.getAttribute("data-shape");
var newImageSrc = "img/" + shape + "_" + color + "_" + "img.jpg";
document.getElementById("myimg").src = newImageSrc;
}
</script>
答案 0 :(得分:1)
你可以将json传递给data属性,不要使用内联javascript,尝试将逻辑与标记分开
data-json='{"color": "blue", "shape": "circle"}'
或使用jquery简单访问DOM
data-color="blue"
data-shape="circle"
$("selector").data("color")
$("selector").data("shape")
<a href="#" id="elem" data-color="blue" data-shape="circle">click me!</a>
<script>
$(function(){
var el = $("#elem"),
color, shape;
el.click(function(event){
event.preventDefault();
color = $(this).data("color");
shape = $(this).data("shape");
changeSomething(color, shape);
});
function changeSomething(color, shape){
console.log(color + " " + shape);
}
});
</script>
或
<a href="#" id="elem" data-param='{"color": "blue", "shape": "circle"}'>click me!</a>
<script>
$(function(){
var el = $("#elem"),
param = {};
el.click(function(event){
event.preventDefault();
param = $(this).data("param");
changeSomething(param);
});
function changeSomething(param){
console.log(param);
}
});
</script>
答案 1 :(得分:0)
您需要一些变量来保持当前color
和shape
。然后,每次更改颜色或形状时,您都将更新此变量,然后相应地加载图像。
尽量保留当前代码,您可以将color
和shape
变量移到函数之外。然后changecolor
更改当前颜色,changeshape
更改当前形状。您可以将color
和shape
变量初始化为初始值。在你的情况下橙色和方形。
var color = 'orange';
var shape = 'square';
function changecolor(elem) {
color = elem.getAttribute("data-color");
var newImageSrc = "img/" + shape + "_" + color + "_" + "img.jpg";
document.getElementById("myimg").src = newImageSrc;
}
function changeshape(elem){
shape = elem.getAttribute("data-shape");
var newImageSrc = "img/" + shape + "_" + color + "_" + "img.jpg";
document.getElementById("myimg").src = newImageSrc;
}
查看demo。这不起作用,因为图像不可用但应该在您的环境中工作。