每当我 Select colored颜色 the view时,我都想更改图像,所以我编写了一个AJAX来返回该 colored颜色 的乘积.以下是代码:

$(document).on('change', '#colorId', function () {
    GetImages(colorIds)
});
function GetImages(productId) 
{
    $.ajax({
        url: '@Url.Action("GetImages","ProductView")',
        type: 'GET',
        data: { id : productId },
        success: function (data) {

            console.log("Hello " + data);

            var images = [
                data.image1,
                data.image2,
                data.image3,
                data.image4
            ];

            var image = document.querySelectorAll('#product-imgs .product-preview .image');

            for (var i = 0; i < images.length; i++) {
                image.src = '/Contents/img/' + images[i].split('/').pop();
            }
        }
    })
}

json返回JsonResult.正如你可以看到的,它的包含4个图像路径.所以我想改变下面的视图中的图像路径,我收到了Json

<div class="col-md-5 col-md-push-2">
    <div id="product-main-img">
        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image1" alt="">
        </div>

        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image2" alt="">
        </div>

        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image3" alt="">
        </div>

        <div class="product-preview">
            <img class="image"  src="~/Contents/img/@Model.ProductItems.Image4" alt="">
        </div>
    </div>
</div>
<!-- /Product main img -->
<!-- Product thumb imgs -->
<div class="col-md-2  col-md-pull-5">
    <div id="product-imgs">
        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image1" alt="">
        </div>

        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image2" alt="">
        </div>

        <div class="product-preview">
            <img class="image"  src="~/Contents/img/@Model.ProductItems.Image3" alt="">
        </div>

        <div class="product-preview">
            <img class="image" src="~/Contents/img/@Model.ProductItems.Image4" alt="">
        </div>
    </div>
</div>

我试了很多方法,但还是不管用.当我改变的时候

 var image = document.querySelector('.image');

它只改变了一个形象.有人知道解决方案吗?如有任何指示,我将不胜感激.感谢您的阅读.

我改变代码像下面的指令和另一个问题是,只有主图像改变image

for (var i = 0; i < imageNodes.length; i++) {
            if (images[i]) {
                imageNodes[i].src = '/Contents/img/' + images[i].split('/').pop();
            }
}

And when I open the webtool I notice there is two different img source in html code html. Why doesn't it change together?

推荐答案

querySelector只返回与指定 Select 器匹配的first元素.要修改all个图像,你需要使用querySelectorAll,它返回所有匹配指定 Select 器的元素,然后迭代它们以改变它们的src属性:

var images = document.querySelectorAll('.image'); // Notice that
// this is a nodeList, so you need to use a loop structure 
// to change all the elements.

也就是说,for循环中的success函数中有一个bug.变量image是一个NodeList,所以你需要使用image[i].src而不是image.src来引用每个 node .

您可以按照以下方式更正该部分:

var imageNodes = document.querySelectorAll('#product-main-img .product-preview .image, #product-imgs .product-preview .image');

for (var i = 0; i < imageNodes.length; i++) {
    if(images[i]) {
        imageNodes[i].src = '/Contents/img/' + images[i].split('/').pop();
    }
}

Javascript相关问答推荐

我不知道为什么我的JavaScript没有验证我的表单

当在select中 Select 选项时,我必须禁用不匹配的 Select

传递一个大对象以在Express布局中呈现

按下同意按钮与 puppeteer 师

使用LocaleCompare()进行排序时,首先使用大写字母

在使用HighChats时如何避免Datatables重新初始化错误?

在Matter.js中添加从点A到另一个约束的约束

从页面到应用程序(NextJS):REST.STATUS不是一个函数

如何限制显示在分页中的可见页面的数量

在SHINY R中的嵌套模块中,不能使用Java代码

有效路径同时显示有效路径组件和不存在的路径组件

try 将Redux工具包与MUI ToggleButtonGroup组件一起使用时出错

使用jQuery find()获取元素的属性

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

与在编剧中具有动态价值的定位器交互

如何使用fltter_js将对象作为参数传递给javascrip?

使用Java脚本在div中创建新的span标记

使用VITE开发服务器处理错误