首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery .attr()返回为未定义

jquery .attr()返回为未定义
EN

Stack Overflow用户
提问于 2014-07-15 15:42:12
回答 1查看 550关注 0票数 0

我有以下jQuery代码:

我的Html:

代码语言:javascript
复制
<div class="input-group top_buffer_small">
    <label class="col-md-3 col-sm-3 text_right top_buffer_mini">Available Colors:</label>
    <div class="col-md-9 col-sm-9 text_right">
        <table id="availColors" align="center">
            <?php 
                //instantiate color class
                $colors = $Item->getColors();
                $colorCount = $Item->getColorCount();
                if($colorCount > 0){
                    //create a mod since we only want to show 4 colors per row.
                    $remainder = $colorCount%4;
                    $x=0; //counter variable
                    if(is_array($colors)){
                        foreach ($colors as $key=>$value){
                            foreach ($value as $color) {
                                if($remainder == 0){
                                    //if we are at 0, make a new row
                                    echo "<tr>";
                                }
                                //print_r($Item->getProductVariations($color));
                                ?>
                                <td style="background-color:#<?php echo $color;?>" data-pictures="<?php echo htmlspecialchars(json_encode($Item->getProductVariations($color))); ?>" data-directory="<?php echo $pictures.$category.'/'.$itemid.'_'.$itemName.'/';?>"></td>
                                <?php 
                                if($remainder == 3){
                                    //end the row
                                    echo "</tr>";
                                }
                            //$x++;
                            }
                        }
                    }
                }
            ?>
        </table>
    </div>
</div>

基本上,我正在尝试获取从传递到我的javascript的数组值。在我得到这些值之后,我试图让所有的图像缩略图在单击一种颜色时变成图片。

这是我打算更改图片缩略图的div:

代码语言:javascript
复制
<div class="row">
    <div class="featured_container_small" id="productThumbnails">
            <h5>Other Views</h5>
            <div class="col-md-3 buffer_bottom"><img src="http://placehold.it/80x100" alt="" class=" center_image responsive_image"></div>
            <!-- <div class="col-md-3 buffer_bottom"><img src="<?php echo $pictures.$category.'/'.$itemid.'_'.$itemName.'/'.$smallimage1?>" class=" center_image responsive_image"></div> -->
            <div class="col-md-3 buffer_bottom"><img src="http://placehold.it/80x100" alt="" class=" center_image responsive_image"></div>
            <div class="col-md-3 buffer_bottom"><img src="http://placehold.it/80x100" alt="" class=" center_image responsive_image"></div>
            <div class="col-md-3 buffer_bottom"><img src="http://placehold.it/80x100" alt="" class=" center_image responsive_image"></div>  
        </div>
        <div class="row">
            <div class="col-md-12"><nbsp></nbsp></div>
        </div>
        <div class="clear"></div>
</div>

下面是我的jquery:

代码语言:javascript
复制
$(function(){
    $("#availColors td").click(function(){
        var imageDirectory = $(this).attr('data-directory');
        var pictures = $(this).attr('data-pictures');
        var pictureArray = JSON.parse(pictures);
        var productThumbnails = $("#productThumbnails img");
        var thumbnailCount = productThumbnails.length;
        var keys = Object.keys(pictureArray);
        var pic = "";
        var src="";

        for (var i = 0; i < keys.length; i++) {
            pic = pictureArray[keys[i]];     
            productThumbnails[i].attr("src",imageDirectory+pic+".jpg");
        }
    });
});

当我执行单击函数时,返回一个错误消息"undefined is not a function“。

我不知道它为什么要这么做。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2014-07-15 15:57:52

当您遍历图像集合时,productThumbnails[i]返回底层的HTMLImageElement,它不提供attr()方法。试着用jQuery来包装它:

代码语言:javascript
复制
$(productThumbnails[i]).attr("src",imageDirectory+pic+".jpg");

此外,在使用jQuery时,访问与DOM元素关联的任意数据的最佳方法是使用data()方法:

代码语言:javascript
复制
var imageDirectory = $(this).data('directory');
var pictures = $(this).data('pictures');

作为额外的好处,您还将获得开箱即用的JSON反序列化,并且不需要JSON.parse()

代码语言:javascript
复制
var pictureArray = $(this).data('pictures');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24752565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档